2016-11-15 70 views
1

如果a字段不是False,我想應用odoo域。如何寫有條件的odoo域名?

['|',('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> 
+1

如果你不介意提供更多的上下文。在代碼中顯示你的域的定義(不僅僅是域)。顯示調用你的函數的字段定義。 –

+0

@Phillip Stack編輯添加上下文 –

+0

我看到過類似的東西。 version_ids是一個列表,version_id是一個int或False。列表int比較可能是一個問題。將'version_id'換成列表'('versions_ids','=',[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

域的第一部分工作正常。 ('versions_ids','=',version_id)。 但如果我只使用這個,如果version_id是False,它只顯示versions_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 「not false show」sales.order.line.version_id「位於」sales.order.line.product_id.versions_ids「 –

+0

如果版本ID爲false,該怎麼辦? –

+0

只有當version_id不是false時,我才需要應用域。 在python會。 如果VERSION_ID: 域= [( 'version_ids', '=',VERSION_ID) 其他: 域= [] 你的代碼,如果VERSION_ID定義,顯示其versions_ids =假的產品,而我只需要表演product_id.versions_ids = version_id –