Как написать условно домен odoo?

Я хочу применить домен odoo, если поле a не равно False.

['|',('versions_ids', '=', version_id),(False, '=', version_id)]

Домен как я писал выкидывает эту ошибку

TypeError: unhashable type: 'list'

РЕДАКТИРОВАТЬ:

Расширение объекта:

class sale_order_line(models.Model):
    _inherit = 'sale.order.line'

    version_id = fields.Many2one('product_cars_application.version',string='Version')

вид расширяется

<record id="sale_cars_append" model="ir.ui.view">
            <field name="name">sale.order.form</field>
            <field name="model">sale.order</field>
            <field name="inherit_id" ref="sale.view_order_form"/>
            <field name="arch" type="xml">
                <xpath expr="." position="inside">
                    <script type='text/javascript' src='/product_cars_application/static/src/js/filter.js'></script>
                </xpath>

                <xpath expr="/form/sheet/notebook/page[1]/field[@name='order_line']/tree/field[@name='product_id']" position="before">
                    <!-- <button name="product_search" type="action" class="oe_highlight" icon="fa-car" /> -->
                    <field name="version_id"/>
                </xpath>
                <xpath expr="/form/sheet/notebook/page[1]/field[@name='order_line']/tree/field[@name='product_id']" position="attributes">
                    <attribute name = "domain">['|',('versions_ids', '=', version_id),(False, '=', version_id)]</attribute>
                </xpath>
            </field>
        </record>

person Mariano DAngelo    schedule 15.11.2016    source источник
comment
Если вы не возражаете предоставить больше контекста. Покажите код, где определяется ваш домен (не только домен). Покажите определение поля, которое вызывает вашу функцию.   -  person Phillip Stack    schedule 16.11.2016
comment
@Phillip Stack редактирует добавление контекста   -  person Mariano DAngelo    schedule 16.11.2016
comment
Я видел что-то подобное. version_ids — это список, version_id — это int или False. Сравнение списка int, вероятно, является проблемой. Оберните version_id в список `('versions_ids', '=', [version_id])   -  person Phillip Stack    schedule 16.11.2016
comment
также используйте in вместо =   -  person Phillip Stack    schedule 16.11.2016
comment
первая часть домена работает нормально. ('versions_id', '=', version_id). но если я использую это только в том случае, если version_id имеет значение False, он показывает только продукты с version_ids = False, и я хочу показать все   -  person Mariano DAngelo    schedule 16.11.2016


Ответы (2)


Попробуйте следующее.

<xpath expr="/form/sheet/notebook/page[1]/field[@name='order_line']/tree/field[@name='product_id']" position="attributes">
    <attribute name = "domain">['|',('version_ids', '=', version_id),('version_ids','=',False),'|',('version_id','=',False)]</attribute>
</xpath>
person Phillip Stack    schedule 15.11.2016
comment
первая часть домена работает нормально. ('versions_id', '=', version_id). но если я использую это только в том случае, если version_id имеет значение False, он показывает только продукты с version_ids = False, и я хочу показать все - person Mariano DAngelo; 16.11.2016
comment
Я изменю свое предложение. - person Phillip Stack; 16.11.2016
comment
Я часто нахожу эти домены неинтуитивным процессом. Я думаю, что если вы поместите оператор OR перед первым кортежем, синтаксический анализатор ожидает, что второй кортеж будет альтернативным значением первого листа в первом кортеже. Поэтому вы, вероятно, захотите поместить | после вашего первого кортежа. - person Phillip Stack; 16.11.2016

Это должно быть так,

<xpath expr="/form/sheet/notebook/page[1]/field[@name='order_line']/tree/field[@name='product_id']" position="attributes">
    <attribute name = "domain">['|',('version_ids', '=', version_id),('version_ids','=',False)]</attribute>
</xpath>

Еще один вариант домена.

['|',('version_ids', '=', version_id),('version_ids','=',[(6,False,[])])]
person Emipro Technologies Pvt. Ltd.    schedule 16.11.2016
comment
Это будет показывать продукты с sales.order.line.version_id в sales.order.line.product_id.versions_ids, а также sales.order.line.product_id.versions_ids = False... Мне нужно показать: Если version_id не False показать продажи .order.line.version_id находится в sales.order.line.product_id.versions_ids - person Mariano DAngelo; 16.11.2016
comment
А что, если идентификатор версии неверен? - person Emipro Technologies Pvt. Ltd.; 16.11.2016
comment
Мне нужно применить домен, только если version_id не является ложным. В питоне было бы. if version_id: domain = [('version_id', '=', version_id)] ​​else: domain = [] Ваш код, если определен version_id, показывать продукты, для которых version_ids = False, и мне нужно показывать только продукты, для которых product_id.versions_ids = version_id - person Mariano DAngelo; 16.11.2016