在 Odoo 模型表中创建 ID 的外键
Create Foreign Key of ID in Odoo Model Tables
我在 Odoo 中定义了两个模型。第一个模型有一个 ID,当我在其中创建记录时,它由 Odoo 自动创建。然后,我需要在创建第二个模型后将该 ID“link”,名称为 main_id
。此 main_id
将作为第二个模型中的外键。
我看到在 Odoo 的 product.template
和 product.product
到 psql
之间实现了相同的方法。我可以使用 One2Many 来实现这种方式,但我不知道如何在 Odoo 中定义字段以实现 link 编辑到 id
的 main_id
列,因为我没有定义id
一个人。
我的第一个模型:
class FirstModel(models.Model):
_name = 'first.model'
user = fields.Many2one("res.user", "Person Name")
product_lines = fields.One2many('first.model.lines', 'product_id')
我的第二个模型:
class SecondModel(models.Model):
_name = 'first.model.lines'
product_id = fields.Many2one('product.product', string="Product Name")
product_qty = fields.Integer(string="Qty")
如何在后来将第一个模型 ID 作为外键的第二个模型中创建记录?
您只需要在第一个模型行中创建一个 Many2one 关系字段,然后在第一个模型行中的 One2many 字段中使用它型号如下:
class FirstModel(models.Model):
_name = 'first.model'
# One2many of the lines (main_id is a foreign key in the first.model.line)
line_ids = fields.One2many('first.model.lines', 'main_id', 'Lines')
class FirstModel(models.Model):
_name = 'first.model.lines'
# Foreign Key of the first.model
main_id = fields.Many2one('first.model', 'First Model')
我找到了在 One2many 中创建“外键”的解决方案。
创建 One2many 时,如 Odoo documentation 所述,它需要一个名为 inverse_name
的东西。它应该在第一个模型和第二个模型中声明。而不是使用 'product_id'
,我创建了一个名为 'foreign_key'
的新变量,稍后将按预期连接两个模型。
所以 FirstModel 将是:
class FirstModel(models.Model):
_name = 'first.model'
user = fields.Many2one("res.user", "Person Name")
product_lines = fields.One2many('first.model.lines', 'foreign_key')
SecondModel 将是:
class SecondModel(models.Model):
_name = 'first.model.lines'
foreign_key = fields.Many2one('combine.product', string="Foreign Key")
product_id = fields.Many2one('product.product', string="Product Name")
product_qty = fields.Integer(string="Qty")
此外,由于 foreign_key
将由 Odoo 自动添加,在 .XML 文件中,我隐藏了 foreign_key
字段,因此用户不会注意到并在其上进行操作。
我的 XML 文件:
<field name="product_lines">
<tree>
<field name="foreign_key" invisible="1"/>
<field name="product_id"/>
<field name="product_qty"/>
</tree>
</field>
我在 Odoo 中定义了两个模型。第一个模型有一个 ID,当我在其中创建记录时,它由 Odoo 自动创建。然后,我需要在创建第二个模型后将该 ID“link”,名称为 main_id
。此 main_id
将作为第二个模型中的外键。
我看到在 Odoo 的 product.template
和 product.product
到 psql
之间实现了相同的方法。我可以使用 One2Many 来实现这种方式,但我不知道如何在 Odoo 中定义字段以实现 link 编辑到 id
的 main_id
列,因为我没有定义id
一个人。
我的第一个模型:
class FirstModel(models.Model):
_name = 'first.model'
user = fields.Many2one("res.user", "Person Name")
product_lines = fields.One2many('first.model.lines', 'product_id')
我的第二个模型:
class SecondModel(models.Model):
_name = 'first.model.lines'
product_id = fields.Many2one('product.product', string="Product Name")
product_qty = fields.Integer(string="Qty")
如何在后来将第一个模型 ID 作为外键的第二个模型中创建记录?
您只需要在第一个模型行中创建一个 Many2one 关系字段,然后在第一个模型行中的 One2many 字段中使用它型号如下:
class FirstModel(models.Model):
_name = 'first.model'
# One2many of the lines (main_id is a foreign key in the first.model.line)
line_ids = fields.One2many('first.model.lines', 'main_id', 'Lines')
class FirstModel(models.Model):
_name = 'first.model.lines'
# Foreign Key of the first.model
main_id = fields.Many2one('first.model', 'First Model')
我找到了在 One2many 中创建“外键”的解决方案。
创建 One2many 时,如 Odoo documentation 所述,它需要一个名为 inverse_name
的东西。它应该在第一个模型和第二个模型中声明。而不是使用 'product_id'
,我创建了一个名为 'foreign_key'
的新变量,稍后将按预期连接两个模型。
所以 FirstModel 将是:
class FirstModel(models.Model):
_name = 'first.model'
user = fields.Many2one("res.user", "Person Name")
product_lines = fields.One2many('first.model.lines', 'foreign_key')
SecondModel 将是:
class SecondModel(models.Model):
_name = 'first.model.lines'
foreign_key = fields.Many2one('combine.product', string="Foreign Key")
product_id = fields.Many2one('product.product', string="Product Name")
product_qty = fields.Integer(string="Qty")
此外,由于 foreign_key
将由 Odoo 自动添加,在 .XML 文件中,我隐藏了 foreign_key
字段,因此用户不会注意到并在其上进行操作。
我的 XML 文件:
<field name="product_lines">
<tree>
<field name="foreign_key" invisible="1"/>
<field name="product_id"/>
<field name="product_qty"/>
</tree>
</field>