Установить значение по умолчанию при создании записи из поля one2many - odoo

Я хочу установить значение по умолчанию для нескольких полей при создании записей из поля one2many, при этом значение по умолчанию будет взято из родительской модели.

Структура модели Odoo

class purchase_order(models.Model):
    _inherit='purchase.order'

    cash_forecast_ids = fields.One2many(comodel_name='cash.forecast', inverse_name='purchase_order_id', string='Payment Schedules')


class cash_forecast(models.Model):
    _name='cash.forecast'

    purchase_order_id = fields.Many2one(comodel_name='purchase.order', string='PO', select=True, copy=False)
    foreign_currency_amount = fields.Float("Foreign Currency Amount", copy=False)
    currency_id = fields.Many2one(comodel_name="res.currency", string="Currency", copy=False)
    company_id = fields.Many2one(comodel_name='res.company', string='Company')

Проблема: теперь я хочу указать валюту и компанию из заказа на покупку, в то время как запись прогноза денежных средств будет создана из представления формы заказа на покупку, но я не знаю, как это сделать. сделай это.

ПРИМЕЧАНИЕ. Я не могу взять валюту или поле компании, связанные или функциональные, потому что есть несколько других ситуаций, в которых компанию и валюту следует вводить вручную, и при этом ссылка на заказ на поставку не устанавливается.

Просмотр формы заказа

<page string="Deliveries &amp; Invoices" position="after">
    <page string="Payment Scedule">
        <field name="cash_forecast_ids" attrs="{'readonly' : [('state','in',['done','cancel'])]}">
            <tree string="Payment Scedule" editable="bottom">
                <field name="name"/>
                <field name="cash_forecast_type_id" required="1" domain="[('add_to_po_payment_schedule','=',True)]" />
                <field name="note" />
                <field name="forecast_date" />
                <field name="period_id" required="1" />
                <field name="foreign_currency_amount" required="1" />
                <field name="currency_id" required="1" />
                <field name="purchase_order_id" invisible="1"/>
                <field name="company_id" required="1" /> 
            </tree>
        </field>
    </page>
</page>

Кто-нибудь может мне посоветовать, что мне делать в таком случае?


person Emipro Technologies Pvt. Ltd.    schedule 16.12.2016    source источник


Ответы (2)


Я знаю, как это сделать.

Чтобы установить значения по умолчанию непосредственно при добавлении записей в поля one2many, нам необходимо установить значения в контексте с префиксом default_field_name: value.

context = {'default_currency_id': currency_id, 'default_company_id': company_id}

Примечание: active_id недоступен при создании новой записи, и с этой новой записью, если вы укажете значение в модели one2many, тогда активных идентификаторов там не будет. Он доступен только после сохранения родительской записи.

Решение:

<field name="cash_forecast_ids" context="{'default_currency_id' : currency_id, 'default_company_id' : company_id}">
    <tree string="Payment Scedule" editable="bottom">
        <field name="name"/>
        <field name="forecast_date" />
        <field name="foreign_currency_amount" required="1" />
        <field name="currency_id" domain="[('id','=',parent.currency_id)]" required="1" />
        <field name="purchase_order_id" invisible="1"/>
        <field name="company_id" domain="[('id','=',parent.company_id)]" required="1" /> 
    </tree>
</field>

Если вы хотите добавить домен в поля модели one2many и в этом случае хотите использовать значения родительской модели, вы можете сделать это следующим образом.

<field name="company_id" domain="[('id','=',parent.company_id)]" />
person Emipro Technologies Pvt. Ltd.    schedule 24.12.2016

Чтобы отправить родительское значение в поле one2many, определите контекст для поля one2many в XML, чтобы использовать контекстное добавление «default_» в качестве префикса к желаемому полю, например "default_state" в качестве ключа, а в качестве значения используйте имя поля родительской таблицы.

<field name="external_evaluation_ids" context="{'default_state':state}">
 <tree>
  <field name="state"/> <!--newly created field in one2many table-->
  <field name="child_table_field1"/>
  <field name="child_table_field2"/>
  <field name="child_table_field2"/>
 </tree>
</field>

В приведенном выше фрагменте кода у нас есть поле one2many, и в этом поле мы определяем контекст со значением ключа. Здесь имя ключа будет начинаться с «default_» и, чем имя поля, значение должно быть именем поля родительской таблицы, которое мы хотим отобразить в представлении всплывающей формы one2many. Для получения дополнительной информации http://learnopenerp.blogspot.com/2018/01/get-parent-form-value-in-one2many-form.html.

person user3623213    schedule 24.04.2018