我想在从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')
问题: 现在我想做的是,我想设置货币和公司 购买订单,同时从中创建现金预测记录 PO表单视图,但我不知道该怎么做。
注意:我无法将货币或公司字段视为相关或 功能因为公司和公司很少有其他情况 应手动输入货币,并且不会设置PO参考。
PO表单视图
<page string="Deliveries & 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>
任何人都可以建议我,在这种情况下该怎么做?
答案 0 :(得分:2)
我找到了怎么做的方法。
为了在添加记录时直接设置默认值 one2many 字段,我们需要在上下文中使用前缀设置值 default_field_name:值。
context =“{'default_currency_id':currency_id,'default_company_id':company_id}”
注意:创建新记录时,active_id不可用 如果你在one2many模型中提供价值那么新的记录 活动ID不会出现。它只有在您保存后才能访问 父母记录。
解决方案:
<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)]" />
答案 1 :(得分:0)
要将父值发送到XML中one2many字段的one2many字段定义上下文,要使用上下文附加“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