2015-09-03 3 views
0

Я хочу сделать что-то, чего я никогда раньше не делал, и на самом деле нет идей о том, как его решить.Odoo: Inherit: Заменить поле условно

Что я хочу сделать: Когда флажок установлен, замените поле «имя» другим полем (выбором), но напишите значение в исходное поле «имя».

Проблема здесь, когда я делаю Наследовать с заменой, как это: (. В этом коде, поле «realman» является флажок)

<xpath expr="//field[@name='name']" position="replace"> 
      <field name="name" attrs="{'invisible': [('realman', '=', True)]}"/>     
      <field name="workcenter_naam" attrs="{'invisible': [('realman', '=', False)]}" required="1"/> 
</xpath> 

Это будет выглядеть правильно в передней конец, но когда я выбираю значение для поля «workcenter_naam» и нажмите кнопку сохранить, он дает эту ошибку:

The following fields are invalid: Name

Если изменить имя поля «workcenter_naam» на «имя» в Пыть hon, он ВСЕГДА будет использовать это поле (вместо исходного поля имени), независимо от этого флажка. Как это:

workcenter_naam = fields.Selection(_workcentername_selection, string="Workcenter naam") 

Вместо:

name = fields.Selection(_workcentername_selection, string="Workcenter naam") 

Это то, что он выглядит на переднем конце: enter image description here

Как это выглядит на переднем конце, как это должно , Значение, выбранное в унаследованном виде, например, «Bakkerij», просто должно быть помещено в поле имени.

Есть ли у кого-нибудь идеи о том, как решить эту проблему? Если что-то неясно, сообщите мне.

ответ

0

Когда вы скрыть поле «имя» невидим, но он по-прежнему требуется

Вы можете держать оба поля, но вы должны удалить атрибут «необходимый» в поле «имя» своего класса питона. Наконец, добавьте атрибут «необходимый» в представлении формы XML, чтобы сделать это необходимо только в этой конкретной точки зрения:

<field name="name" position="replace"> 
    <field name="name" attrs="{'invisible': [('realman', '=', True)]}" required="1"/>     
    <field name="workcenter_naam" attrs="{'invisible': [('realman', '=', False)]}" required="1"/> 
</field> 

Или вы можете делать то, что вы сделали :)

@api.onchange('workcenter_naam') 
def onchange_workcenter_naam(self): 
    self.name = self.workcenter_naam 

И я бы тоже добавьте эту функцию (или аналогичную), чтобы сбросить поле «имя»

@api.onchange('realman') 
def onchange_realman(self): 
    if self.realman: 
     self.name = self.workcenter_naam    
    else: 
     self.name = '' 
     self.workcenter_naam = self._defaults['workcenter_naam'] 
+0

Вы правы. Но так как он дает эту ошибку, я знаю, что значение для «workcenter_naam» не передается в поле «имя». Я хочу, чтобы мое поле перезаписывало поле «имя», ТОЛЬКО если realman = true. – RobbeM

+0

ОК, тогда вы можете добавить функцию вычисления, которая хранит значение 'workcenter_naam' в поле' name' – ChesuCR

+0

Я решил его сейчас. Очень просто ... @ api.onchange ('workcenter_naam') И в функции: self.name = self.workcenter_naam – RobbeM

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