many2many fileds都是相同的值?

时间:2016-09-15 13:46:53

标签: python postgresql openerp

我有这段代码:

在.py文件中:

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

    supply_tax_id = fields.Many2many('account.tax',string='Supply Taxes',domain=['|', ('active', '=', False), ('active', '=', True)])         
    labour_tax_id = fields.Many2many('account.tax',string='Labour Taxes',domain=['|', ('active', '=', False), ('active', '=', True)])
<。>在.xml文件中:

<field name="supply_tax_id" widget="many2many_tags" domain="[('type_tax_use','=','sale'),('company_id','=',parent.company_id)]" attrs="{'readonly': [('qty_invoiced', '&gt;', 0)]}"/>
<field name="labour_tax_id" widget="many2many_tags" domain="[('type_tax_use','=','sale'),('company_id','=',parent.company_id)]" attrs="{'readonly': [('qty_invoiced', '&gt;', 0)]}"/>

当我尝试更改supply_tax_id时,它会发生变化,但保存supply_tax_id后,labour_tax_id两者都相同。我不知道它是如何相互联系的。我希望supply_tax_idlabour_tax_id应该是不同的值,字段应来自account.tax

请帮助我找到问题的解决方案。谢谢大家的建议。

1 个答案:

答案 0 :(得分:3)

Odoo正在您的数据库中生成关系表。您可以在字段定义中自行提供表名:

class MyModel(models.Model):
    _name = "my.model"

    my_m2m_field = fields.Many2Many(
        comodel_name="another.model", # required
        relation="my_model_another_model_rel", # optional
        column1="my_model_id", # optional
        column2="another_model_id", # optional
        string="Another Records" # optional
    )

您的示例并未在字段定义中使用relation参数,因此Odoo会自行生成名称。它为它使用了两个模型(表)名称,并添加了一个&#34; _rel&#34;在名称的末尾:

sale_order_line_account_tax_rel

问题在于:您在两个不同的Many2Many字段上使用相同的两个模型,这些字段最终会出现在一个关系表中。因此,在使用这些字段时,这两个字段将代表客户端中的相同数据。

解决方案:使用参数relation并为关系表定义两个不同的名称。