Как я могу установить атрибут поля на required=True или required=False на основе значения другого поля?

У меня есть поле выбора в модели res.partner, которое равно employmentstatus, и есть варианты employed или unemployed. Я хочу, чтобы другое поле employmenttype имело атрибут required=True, если employmentstatus='employed', или required=False, если employmentstatus='unemployed'. Поле прямо сейчас устанавливает обязательное значение True независимо от того, работает ли Партнер или нет (см. прикрепленное изображение здесь).

Вот мой код:

from openerp.osv import osv, fields
from openerp import tools
class custom_fields_partner(osv.Model):
    _inherit = 'res.partner'
    _columns = {
        'employmentstatus' : fields.selection([
        ('employed','Employed'),
        ('unemployed','Unemployed')
        ],'Employment status', required=True, default='unemployed'),
        'employmenttype' : fields.selection([
        ('0','Public'),
        ('1','Private'),
        ('2','Mission')],'Nature of employment', required="fieldproperty"),
    }

    @api.one
    def fieldproperty(self):
        if self.employmentstatus == 'employed':
            return True
        else:
            return False

person Olalekan Babawale    schedule 08.02.2017    source источник


Ответы (1)


Ожидается, что требуемый атрибут будет храниться в базе данных и не предназначен для вычисления на лету. Лучше всего сделать это на стороне клиента. Если вы посмотрите на модель ir.model.fields, вы заметите, что требуемое поле хранится в базе данных и не предназначено для вычисления.

В вашем xml используйте атрибут attrs. Вот пример.

<field name="field_name" attrs="{'required':[('other_field','=','other_value')]}"/>

Таким образом, в этом примере поле с именем field_name требуется только в том случае, если поле other_field имеет значение other_value, но вы можете создать критерии домена, которые являются более сложными или менее сложными в зависимости от ваших потребностей.

Поле other_field должно присутствовать в вашем представлении, чтобы это работало, потому что оценка выполняется на стороне клиента. Если вам нужно включить поле для оценки, но вы не хотите его отображать, вы можете сделать его невидимым. Как это.

<field name="other_field" invisible="1"/>
person Phillip Stack    schedule 08.02.2017