Как автоматически заполнить поле в пользовательском представлении из другого поля в другом представлении в Odoo?

Я хочу создать оформление для контракта с некоторыми предметами с 3 атрибута каждого предмета У меня 4 модели:

  1. Договор

  2. Распродажа

  3. пункт
  4. Clearance_item_rel

Когда я нахожусь в пользовательском представлении модели оформления, я выбираю контракт из Many2one поля отношения

затем попробуйте создать запись Clearance_item_rel в Clearance_item_rel модель.

Когда я нажимаю, чтобы создать запись Clearance_item_rel, открывается настраиваемый вид в новом окне

Я хочу использовать выбранный идентификатор контракта в первом представлении, чтобы автоматически заполнить поле contract_id в Clearance_item_rel, поскольку пользователь только что выбрал его в первом представлении.

P.S: clearance_id is created automatically as I create the Clearance_item_rel record from clearance custom view But contract_id doesn't do and this's my problem

Договор:

class Contract(models.Model):
    _name = 'clearance.contract'
    clearances = fields.One2many('clearance.clearance_item_rel', 
    'contract_id')

зазор:

class Clearance(models.Model):
    _name = 'clearance.clearance'
    contract = fields.Many2one('clearance.contract','Contract')
    items = fields.One2many('clearance.clearance_item_rel',clearance_id')

Clearance_item_rel:

class Clearance_item_rel(models.Model):
    _name = 'clearance.clearance_item_rel'
    contract_id = fields.Many2one('clearance.contract', 'Contract', ondelete='cascade')
    clearance_id = fields.Many2one('clearance.clearance', 'Clearance', ondelete='cascade')
    item_id = fields.Many2one('clearance.contract_item_rel', 'Item', ondelete='cascade')
    previous_quantity = fields.Integer()
    used_quantity = fields.Integer()
    total_price = fields.Integer()
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
619
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отвечать

Вы можете сделать это через контекст в определении поля представления формы. Образец кода:

<record id = "clearance_view_form" model = "ir.ui.view">
    <field name = "name">clearance.view.form</field>
    <field name = "model">clearance.clearance</field>
    <field name = "arch" type = "xml">
        <form>
            <field name = "contract"/>
            <field name = "items" context = {'default_contract_id': contract}/>
        </form>
    </field>
</record>

Где default_contract_id — это имя поля clearance.clearance_item_rel с префиксом default_, а contract — значение, которым вы хотите заполнить поле (в данном случае имя поля в модели clearance.clearance). Обратите внимание, что default_contract_id использует кавычки, а contract — нет.

Советы

Некоторые другие советы, которые вы, возможно, захотите рассмотреть, поскольку я вижу, что ваш код не соответствует некоторым соглашениям об именах Odoo:

  • Имена полей M2o должны иметь суффикс _id, как в contract_id
  • Поля O2m и M2m должны иметь суффикс _ids как в item_ids или clearance_ids

Другие вопросы по теме