2015-09-11 9 views
2

Я столкнулся с странным поведением одного2many поля в 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

Но он должен показывать только «bbb», поскольку «bbb» - единственная запись в базе данных с routing_id = 32 в таблице tussenmodel_wc_producten, а bom_id в таблице tussenmodel_wc_producten равна id в mrp.bom.

Я проверил это с помощью запроса 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 

Что имеет, как только выход "БББ".

Что я здесь делаю неправильно?

Edit: Некоторые скриншоты для Людвика трамвайщик: enter image description here enter image description here

ответ

1

domain атрибут на поле только контролирует , какие объекты присутствуют в списке доступных объектов (то есть объекты, которые могут потенциально выбирается для отношения), когда пользователь редактирует форму. Он не делает ничего более, чем это, и, в частности, он не контролирует, какие объекты действительно находятся в этом отношении.

Если объекты уже в отношении с «aaa», «bbb», «ccc» и «ddd», настройка домена ничего не изменит, чтобы изменить это.

+0

Я попытался понять это, но это довольно сложно понять для меня. Итак, домен, который я вложил в мои взгляды, ничего не делает правильно? Но я предполагаю, что должен быть какой-то способ выбора значений для показа? Я должен поставить свой домен где-то еще? – RobbeM

+0

Не могли бы вы сделать тот же снимок экрана, но с большим контекстом вокруг него, поэтому я могу убедиться, что правильно его интерпретирую? –

+0

Я добавил их в свой OP. – RobbeM

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

Возможная проблема, на вашем one2many поле, обратный аргумент предположим, чтобы указать на many2one на другом столе, т.е. обратный отношению, тогда как в вашем коде выше bom_id в tussenmodel_wc_producten является Integer.

Вы должны пересмотреть, как

fields.Many2one ("mrp.bom", "BOM Id")

Одно последнее дело; tussenmodel_wc_producten не определяет _name для модели. Это законно, так как базовая модель будет по умолчанию классом. имя, если _name не определено, но условно либо определять _name, либо _inherit.Учитывая, насколько важен _name в обработке модели Odoo, я бы не хотел полагаться на все, что ожидалось, если оно не определено.

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