2016-11-15 2 views
1

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

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

домен, как я написал бросить эту ошибку

TypeError: unhashable type: 'list'

EDIT:

Объект удлиняет:

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> 
+1

Если вы не возражаете предоставить больше контекста. Покажите код, где определяется ваш домен (а не только домен). Покажите определение поля, которое вызывает вашу функцию. –

+0

@Phillip Stack редактировать добавление контекста –

+0

Я видел что-то вроде этого. version_ids - это список, version_id - int или False. Вероятно, это сопоставление списка. Wrap 'version_id' в списке' ('versions_id', '=', [version_id]) –

ответ

0

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

<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> 
+0

, первая часть домена работает нормально. ('version_ids', '=', version_id). , но если я использую это только в том случае, если version_id False, он показывает только продукты с версиями_ids = False, и я хочу показать все –

+0

. Я поправлю свое предложение. –

+0

Я часто нахожу эти домены интуитивным процессом. Я думаю, что если вы поместите оператор 'OR' перед первым кортежем, парсер ожидает, что второй кортеж будет альтернативным значением первого листа в первом кортеже. Поэтому вы, вероятно, захотите разместить '' 'после первого кортежа. –

0

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

<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,[])])] 
+0

Это будет показывать продукты с sales.order.line.version_id в sales.order.line.product_id.versions_ids, а также sales.order.line.product_id.versions_ids = False ... Мне нужно показать: Если "version_id «не False show» sales.order.line.version_id «находится в« sales.order.line.product_id.versions_ids » –

+0

А что, если id версии false? –

+0

Мне нужно применить домен, только если version_id не является ложным. В python будет. если version_id: домен = [('version_ids', '=', version_id)] ​​ еще: домен = [] Ваш код, если определен version_id, показывают продукты, которые versions_ids = False, и мне нужно только показывает продуктов, которые product_id.versions_ids = version_id –

Смежные вопросы