姜戈。外键
Django. Foreign key
我有 2 个表:
边和附加成本
现在 AdditionalCost 具有以下外键字段:
side = models.ForeignKey(Side, on_delete=models.CASCADE, related_name='costs')
我想在 AdditionalCosts 中有另一个外键字段:
number_of_additional_installations = models.ForeignKey(Side, on_delete=models.CASCADE, related_name="number_of_additional_installations")
Side 模型具有以下字段:
number_of_additional_installations = models.IntegerField(null=True, blank=True,
db_column='number_of_additional_installations',
verbose_name='Количество доп монтажей')
但是我得到以下错误:
ERRORS:
<class 'kinetics.apps.address_program.admin.AdditionalCostInline'>: (admin.E202) 'address_program.AdditionalCost' has more than one ForeignKey to 'address_program.Side'.
address_program.AdditionalCost.number_of_additional_installations: (fields.E302) Reverse accessor for 'AdditionalCost.number_of_additional_installations' clashes with field name 'Side.number_of_additional_installations'.
HINT: Rename field 'Side.number_of_additional_installations', or add/change a related_name argument to the definition for field 'AdditionalCost.number_of_additional_installations'.
address_program.AdditionalCost.number_of_additional_installations: (fields.E303) Reverse query name for 'AdditionalCost.number_of_additional_installations' clashes with field name 'Side.number_of_additional_installations'.
HINT: Rename field 'Side.number_of_additional_installations', or add/change a related_name argument to the definition for field 'AdditionalCost.number_of_additional_installations'.
我不明白为什么会这样,因为我看到代码有这些行:
buyer_org = models.ForeignKey("acl.Organization", on_delete=models.SET_NULL, null=True, blank=True,
related_name='buyer_costs')
client_org = models.ForeignKey("acl.Organization", on_delete=models.SET_NULL, null=True, blank=True,
related_name='client_costs')
这显然是与一个模型的列相关的两个外部字段。
如果您需要模型的完整代码,请告诉我,它很大,但如果您需要,我可以添加它。谢谢
p.s。如果我重命名 number_of_additional_installations 的 related_name,我仍然会收到以下错误:
ERRORS:
<class 'kinetics.apps.address_program.admin.AdditionalCostInline'>: (admin.E202) 'address_program.AdditionalCost' has more than one ForeignKey to 'address_program.Side'.
这是因为您已经拥有
number_of_additional_installations
在 Sides
中定义,与您在 AdditionalCosts
中设置的相关名称冲突。您要么重命名 Sides
中的字段,要么更改 related_name
参数,这样 Django 就不会混淆要解析的字段。
此代码:
buyer_org = models.ForeignKey("acl.Organization", on_delete=models.SET_NULL, null=True, blank=True,
related_name='buyer_costs')
client_org = models.ForeignKey("acl.Organization", on_delete=models.SET_NULL, null=True, blank=True,
related_name='client_costs')
不是同一种情况。这些字段不会导致冲突,因为它们指的是不同的关系,即使它们指的是同一模型。 model.buyer_org
和model.client_org
returns不同的关系。 model.buyer_org
与 organization.buyer_costs
的映射不包括 model.client_org
,而 model.client_org
又映射到 organization.client_costs
.
尽管会产生冲突,但您指定 Sides
和 AdditionalCosts
的方式发生了什么。
您可以调用 side.number_of_additional_installations
,其中 returns 是一个整数字段,但同时您告诉 django additional_costs.number_of_additional_installations
映射到 side.number_of_additional_installations
.
我有 2 个表:
边和附加成本
现在 AdditionalCost 具有以下外键字段:
side = models.ForeignKey(Side, on_delete=models.CASCADE, related_name='costs')
我想在 AdditionalCosts 中有另一个外键字段:
number_of_additional_installations = models.ForeignKey(Side, on_delete=models.CASCADE, related_name="number_of_additional_installations")
Side 模型具有以下字段:
number_of_additional_installations = models.IntegerField(null=True, blank=True,
db_column='number_of_additional_installations',
verbose_name='Количество доп монтажей')
但是我得到以下错误:
ERRORS:
<class 'kinetics.apps.address_program.admin.AdditionalCostInline'>: (admin.E202) 'address_program.AdditionalCost' has more than one ForeignKey to 'address_program.Side'.
address_program.AdditionalCost.number_of_additional_installations: (fields.E302) Reverse accessor for 'AdditionalCost.number_of_additional_installations' clashes with field name 'Side.number_of_additional_installations'.
HINT: Rename field 'Side.number_of_additional_installations', or add/change a related_name argument to the definition for field 'AdditionalCost.number_of_additional_installations'.
address_program.AdditionalCost.number_of_additional_installations: (fields.E303) Reverse query name for 'AdditionalCost.number_of_additional_installations' clashes with field name 'Side.number_of_additional_installations'.
HINT: Rename field 'Side.number_of_additional_installations', or add/change a related_name argument to the definition for field 'AdditionalCost.number_of_additional_installations'.
我不明白为什么会这样,因为我看到代码有这些行:
buyer_org = models.ForeignKey("acl.Organization", on_delete=models.SET_NULL, null=True, blank=True,
related_name='buyer_costs')
client_org = models.ForeignKey("acl.Organization", on_delete=models.SET_NULL, null=True, blank=True,
related_name='client_costs')
这显然是与一个模型的列相关的两个外部字段。
如果您需要模型的完整代码,请告诉我,它很大,但如果您需要,我可以添加它。谢谢
p.s。如果我重命名 number_of_additional_installations 的 related_name,我仍然会收到以下错误:
ERRORS:
<class 'kinetics.apps.address_program.admin.AdditionalCostInline'>: (admin.E202) 'address_program.AdditionalCost' has more than one ForeignKey to 'address_program.Side'.
这是因为您已经拥有
number_of_additional_installations
在 Sides
中定义,与您在 AdditionalCosts
中设置的相关名称冲突。您要么重命名 Sides
中的字段,要么更改 related_name
参数,这样 Django 就不会混淆要解析的字段。
此代码:
buyer_org = models.ForeignKey("acl.Organization", on_delete=models.SET_NULL, null=True, blank=True,
related_name='buyer_costs')
client_org = models.ForeignKey("acl.Organization", on_delete=models.SET_NULL, null=True, blank=True,
related_name='client_costs')
不是同一种情况。这些字段不会导致冲突,因为它们指的是不同的关系,即使它们指的是同一模型。 model.buyer_org
和model.client_org
returns不同的关系。 model.buyer_org
与 organization.buyer_costs
的映射不包括 model.client_org
,而 model.client_org
又映射到 organization.client_costs
.
尽管会产生冲突,但您指定 Sides
和 AdditionalCosts
的方式发生了什么。
您可以调用 side.number_of_additional_installations
,其中 returns 是一个整数字段,但同时您告诉 django additional_costs.number_of_additional_installations
映射到 side.number_of_additional_installations
.