WedX - журнал о программировании и компьютерных науках

Odoo скрыть поле по состоянию в xml

class myModel(models.Model):

    _name = 'my.model'

    state = fields.Selection(selection=_STATES, string='Status', index=True, track_visibility='onchange',required=True, copy=False, default='draft')
    my_model_line = fields.One2many('my.model.line', 'model_id')

другая модель:

class MyModelLine(models.Model):

    _name = 'my.model.line'

    name = fields.Char(string='Name')
    quantity = fields.Integer(string='Quantity', required=True, default=1)
    remarks = fields.Text(string='Description')
    my_model_id = fields.Many2one('my.model', 'My Model')

my_model.xml

                <field name="my_model_line" attrs="{'readonly': [('state','not in', ('draft'))]}">
                    <tree string="My model Lines" editable="bottom">
                        <field name="name"/>
                        <field name="quantity"/>
                        <field name="remarks"/>
                        <button name="open_new_view" type="object" string="Add" class="oe_highlight"/>
                        <button icon="terp-face-plain" name="test" type="object" string="Add" class="oe_highlight"/>
                    </tree>
                 </field>

Я хочу скрыть my.model.line moel поле примечаний и поле добавления кнопки в зависимости от статуса my.model . Например, скрыть поля, если статус моей модели одобрен.

Насколько я понимаю, я не могу использовать невидимый атрибут с доменом в моем my_model.xml, потому что my.model.line не имеет поля состояния. Может, есть какие-то решения для этого?

Я думал создать поле статуса в объекте my.model.line и изменить его статус в зависимости от статуса my.model.

Также я пробовал вот так:

<field name="remarks" attrs="{'invisible': "[('my_model_id .state', '=', 'approved')]"}"/>

Но тут возникла ошибка: «Неизвестное поле my_model_id.state в домене»


Ответы:


1

Сначала, чтобы использовать поле в attrs, это поле должно быть добавлено в представление формы, это не просто модель, помните об этом, даже если это означает добавить это поле и сделать его невидимым.

Во-вторых, если вы хотите показать поле другого модуля, у которого есть поле many2one, используйте связанное поле.

         state = fields.Selection( 'put same selzction here too',  related='many2one_field.state's, readonly=True) 

Связанное поле Должно иметь тот же тип, если поле char, используйте char, если поле целое, используйте целое число, если поле many2one, используйте many2one. Для большинства полей достаточно только атрибута, но выбор переопределяет тот же выбор.

И теперь вы можете использовать это поле как поле текущей модели.

Извините за мой английский, надеюсь, вы уловили идею

17.08.2017
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]