如何在Odoo中从另一个视图中的另一个字段自动填充自定义视图中的字段?

时间:2019-05-18 03:28:07

标签: python odoo odoo-12

我要为包含某些具有每个项目 3个属性的项目的合同创建许可 我有4种型号:

  1. 合同

  2. 清除

  3. 项目
  4. Clearance_item_rel

在许可模型的自定义视图中,我选择一个合同    来自Many2one关系字段

然后尝试在其中创建Clearance_item_rel记录    Clearance_item_rel模型。

当我单击以创建Clearance_item_rel记录时,它会打开    新窗口中的自定义视图

我想在第一个视图中使用选定的合同ID来自动填充contract_id中的Clearance_item_rel字段,因为用户刚在第一个视图中选择了该合同

  

P.S:clearance_id是在我创建   Clearance_item_rel从清除自定义视图中记录,但是   contract_id不起作用,这是我的问题

合同:

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()

1 个答案:

答案 0 :(得分:2)

答案

您可以通过表单视图的字段定义上的上下文来执行此操作。 示例代码

<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_idclearance.clearance_item_rel的字段名,以default_为前缀,而contract是您要用该字段填充的值(在这种情况下,字段名在clearance.clearance模型上)。请注意,default_contract_id使用引号,而contract则不使用引号。

提示

您可能需要考虑其他一些技巧,因为我看到您的代码未遵循某些Odoo命名约定:

  • M2o字段名称应以_id后缀contract_id
  • O2m和M2m字段的后缀应为_idsitem_ids中的clearance_ids