在 Odoo 模型表中创建 ID 的外键

Create Foreign Key of ID in Odoo Model Tables

我在 Odoo 中定义了两个模型。第一个模型有一个 ID,当我在其中创建记录时,它由 Odoo 自动创建。然后,我需要在创建第二个模型后将该 ID“link”,名称为 main_id。此 main_id 将作为第二个模型中的外键。

我看到在 Odoo 的 product.templateproduct.productpsql 之间实现了相同的方法。我可以使用 One2Many 来实现这种方式,但我不知道如何在 Odoo 中定义字段以实现 link 编辑到 idmain_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>