Odoo Help

Welcome!

This community is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.

1

Domain filter checking for product in many2many list in Sale Order Line item throws javascript error 'No conversion for undefined' on empty m2m list

By
O Sluys
on 1/11/16, 5:31 AM 667 views

I added the following filter to the line item list of the Sale Order form to show only products appropriate for the selected customer:

 <xpath expr="//field[@name='order_line']/tree//field[@name='product_id']" position="attributes"><attribute name="domain">[('id','in',parent.product_ids and parent.product_ids[0][2]),('sale_ok','=',True)]</attribute></xpath>

product_ids is a related field to a many2many list of products the customer has approved:

product_ids = fields.Many2many(related='partner_id.product_ids', string="Approved Products")

This works fine when a customer is selected and the customer's approved products list is not empty, but I get the following javascript error when I try to select a product in the line item and either no customer is selected or the approved products list is empty for that customer:

Error: No conversion for undefined
http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3048
Traceback:
wrap@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3048:44
wrapping_list<.__getitem__@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3053:293
py.PY_getItem@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:2834:9
py.evaluate@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:2917:1
py.evaluate@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:2917:85
py.evaluate@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:2916:108
py.evaluate@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:2918:96
py.eval@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:2923:281
eval_domains/<@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3062:120
_.forEach@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:12:558
_.mixin/</_.prototype[name]@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:69:521
eval_domains@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3061:136
eval_domains/<@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3062:301
_.forEach@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:12:558
_.mixin/</_.prototype[name]@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:69:521
eval_domains@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3061:136
eval_domains/<@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3062:301
_.forEach@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:12:558
_.mixin/</_.prototype[name]@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:69:521
eval_domains@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3061:136
pyeval@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3072:24
eval_arg@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3075:61
ensure_evaluated@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3078:11
.call@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:2945:1
DataSet<.name_search@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3199:1038
CompletionFieldMixin.get_search_result@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3616:25
FieldMany2One<.render_editable/<.source@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3717:103
._search@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:1588:142
$.widget/</proxiedPrototype[prop]</<@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:1124:328
.search@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:1588:8
$.widget/</proxiedPrototype[prop]</<@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:1124:328
$.widget.bridge/$.fn[name]/<@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:1129:13
.each@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:473:758
jQuery.prototype.each@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:461:636
$.widget.bridge/$.fn[name]@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:1126:342
FieldMany2One<.render_editable/<@http://127.0.0.1:8069/web/content/362-dbba6fb/web.assets_backend.js:3712:1057
jQuery.event.dispatch@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:740:378
jQuery.event.add/elemData.handle@http://127.0.0.1:8069/web/content/249-ee9a491/web.assets_common.js:713:151

I thought parent.product_ids on the left-hand side of the and expression in the domain would check for an empty list and shortcut the boolean expression, but obviously, that doesn't work.

What is the correct way to write the domain so that the filter works as intended but also gracefully handles an empty m2m list?


I was able to workaround this issue by specifying the domain dynamically in an onchange event handler. More details about domains and many2many fields can be found in this post: https://www.odoo.com/nl_NL/forum/help-1/question/complex-many2many-domains-in-views-41777

O Sluys
on 1/15/16, 5:53 PM

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

About This Community

This community is for professionals and enthusiasts of our products and services. Read Guidelines

Question tools

1 follower(s)

Stats

Asked: 1/11/16, 5:31 AM
Seen: 667 times
Last updated: 3/16/16, 6:15 AM