首页 > 解决方案 > 如何从 Odoo 的另一个视图中的另一个字段自动填充自定义视图中的字段?

问题描述

我想为一些项目创建一个合同,每个项目都有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因为用户刚刚在第一个视图中选择了它

PS:在我从清关自定义视图 clearance_id创建记录时自动创建 但不这样做,这是我的问题Clearance_item_relcontract_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()

标签: pythonodooodoo-12

解决方案


回答

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

<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_reldefault_contractclearance.clearancedefault_contract_idcontract

提示

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

  • M2o 字段名称应以_idas 为后缀contract_id
  • O2m 和 M2m 字段应以_idsinitem_idsclearance_ids

推荐阅读