如何从 Odoo 中另一个视图中的另一个字段自动填充自定义视图中的字段?
how to fill field automatically in custom view from another field in another view in Odoo?
我想为某些项目创建合同许可,每个项目具有 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_ids
或 clearance_ids
我想为某些项目创建合同许可,每个项目具有 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 theClearance_item_rel
record from clearance custom view Butcontract_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_ids
或clearance_ids