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

how to fill field automatically in custom view from another field in another view in Odoo?

我想为某些项目创建合同许可,每个项目具有 3 个属性 我有 4 个模型:

  1. 合同

  2. 间隙

  3. 项目
  4. Clearance_item_rel

当我在清关模型的自定义视图中时,我 select 一个合同 来自 Many2one 关系字段

然后尝试在 Clearance_item_rel 中创建一条记录 Clearance_item_rel 型号。

当我单击创建 Clearance_item_rel 记录时,它会打开 新 window

中的自定义视图

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

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

回答

您可以通过表单视图字段定义的上下文来完成。 示例代码:

<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 是前缀为 default_clearance.clearance_item_rel 的字段名称, contract 是您要填充该字段的值(在本例中, clearance.clearance 模型上的字段名称)。请注意 default_contract_id 使用引号,而 contract 不使用引号。

提示

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

  • M2o 字段名称应以 _id 为后缀,如 contract_id
  • O2m 和 M2m 字段应以 _ids 为后缀,如 item_idsclearance_ids