Odoo:One2many领域不起作用

时间:2015-09-11 11:12:48

标签: python xml openerp one-to-many odoo

我在Odoo遇到过one2many字段的奇怪行为。

这是我的代码:

models.py:

class mrp_bom_inherit(models.Model): 
    _inherit = 'mrp.bom'
    producten_tussenmodel = fields.One2many(comodel_name='tussenmodel_wc_producten', inverse_name='bom_id', string="producten", copy=True)

class tussenmodel_wc_producten(models.Model):
    bom_id = fields.Integer()
    routing_id = fields.Integer()
    producten = fields.Char(string="Productnr.")

views.xml:

<field name="producten_tussenmodel" widget="one2many_list" nolabel="1">
    <tree string="Een Naar Veel" editable="bottom">
        <field name="producten" domain="[('routing_id', '=', 32)]"/>
    </tree>
</field> 

这给出了输出:

enter image description here

但它应该只显示&#34; bbb&#34;自&#34; bbb&#34;表tussenmodel_wc_producten中的routing_id = 32是数据库中唯一的记录,表tussenmodel_wc_producten中的bom_id等于mrp.bom中的id。

我已经通过SQL查询检查了这个:

select producten
from mrp_bom as m JOIN tussenmodel_wc_producten as t ON(m.id = t.bom_id) 
where t.routing_id = 32

只有输出&#34; bbb&#34;。

我在这里做错了什么?

编辑:Ludwik Trammer的更多屏幕截图: enter image description here enter image description here

3 个答案:

答案 0 :(得分:1)

字段上的

domain属性仅控制可用对象列表中存在哪些对象(即,可能可能为关系选择的对象)当用户编辑表单时。它没有做任何事情,特别是它不能控制关系中实际存在哪些对象。

如果对象已经与“aaa”,“bbb”,“ccc”和“ddd”的关系,设置域将无法做任何改变。

答案 1 :(得分:0)

首先,您需要更新模型中的关系,对于One2many关系,您必须将Many2one字段作为反向字段名称,以便odoo引擎可以正确解释它。

class tussenmodel_wc_producten(models.Model):
    bom_id = fields.Many2one('mrp.bom','Bom')

并以这种方式更新您的字段域

<field name="producten_tussenmodel" widget="one2many_list" nolabel="1" domain="[('routing_id', '=', 32)]">
    <tree string="Een Naar Veel" editable="bottom">
        <field name="producten" />
    </tree>
</field> 

答案 2 :(得分:0)

一个可能的问题,在你的one2many字段上,反向参数假设指向另一个表上的many2one,即关系的反转,而在上面的代码中,tussenmodel_wc_producten中的bom_id是一个整数。

您应该重新定义为

fields.Many2one(“mrp.bom”,“BOM Id”)

最后一件事; tussenmodel_wc_producten没有为模型定义_name。这是合法的,因为基本模型将默认为class。 name 如果未定义_name,但定义_name或_inherit是惯例。鉴于_name在Odoo模型处理中的重要性,如果没有定义,我不想依赖于所有按预期工作的东西。