Django - 将多个外键用于同一型号 [英] Django - using multiple foreign key to the same model
问题描述
我试图在同一模型中使用相同的外键两个字段,并且收到错误。
我试图拥有一个主要和次要的调用用户,但不知道如何在收到以下错误之后格式化关系。
class ManualRotas(models.Model):
rota_name = models.CharField(max_length = 200,choices = settings.ONCALL_ROTAS)
primary_user = models.ForeignKey(User,unique = True,verbose_name =Primary OnCall Engineer)
p_start_time = models .DateTimeField(verbose_name =开始时间)
p_end_time = models.DateTimeField(verbose_name =结束时间)
secondary_user = models.ForeignKey(User,verbose_name =Backup OnCall Engineer,unique = True ,blank = True,null = True)
s_start_time = models.DateTimeField(blank = True,null = True,verbose_name =开始时间)
s_end_time = models.DateTimeField(blank = True,null = True,verbose_name =开始时间)
错误:
oncall.ManualRotas.p rimary_user:(fields.E304)ManualRotas.primary_user的反向访问者与ManualRotas.secondary_user的反向访问者冲突。
提示:添加或更改一个related_name参数到ManualRotas.primary_user或ManualRotas.secondary_user的定义。
oncall.ManualRotas.secondary_user:(fields.E304)ManualRotas.secondary_user的反向访问者与ManualRotas.primary_user的反向访问者冲突。
提示:将相关名称参数添加或更改为ManualRotas.secondary_user或ManualRotas.primary_user的定义。
警告:
oncall.ManualRotas.primary_user:(fields.W342)在ForeignKey上设置unique = True与使用OneToOneField具有相同的效果。
提示:ForeignKey(unique = True)通常由OneToOneField更好地服务。
oncall.ManualRotas.secondary_user:(fields.W342)在外键上设置unique = True与使用OneToOneField的效果相同。
提示:ForeignKey(unique = True)通常由OneToOneField更好地服务。
系统检查确定了4个问题(0个静音)。
你必须定义不同的 related_name
到 ForeignKeys
列。例如:
类ManualRotas(models.Model):
primary_user = models.ForeignKey(User,related_name =' related_primary_manual_roats',unique = True,verbose_name =Primary OnCall Engineer)
#相关名称^ v
secondary_user = models.ForeignKey(User,related_name ='related_secondary_manual_roats',verbose_name =Backup OnCall Engineer unique = True,blank = True,null = True)
#....其他列
< hr>
另请参阅 ForeignKey.related_name
文档,其中说:
用于从相关对象返回到此关系的关系的名称。它也是
related_query_name
(目标模型中用于反向过滤器名称的名称)的默认值。请参阅相关对象文档以获得完整的说明和示例。注意,当在抽象模型上定义关系时,必须设置此值;当你这样做时,可以使用一些特殊的语法。
相关文章: p>
I'm trying to use the same foreign key for two fields in the same model and am getting an error.
Im trying to have a primary and secondary on call user, but am not sure how to format the relationship after receiving the errors below
class ManualRotas(models.Model):
rota_name = models.CharField(max_length=200,choices=settings.ONCALL_ROTAS)
primary_user = models.ForeignKey(User, unique=True, verbose_name="Primary OnCall Engineer")
p_start_time = models.DateTimeField(verbose_name="Start Time")
p_end_time = models.DateTimeField(verbose_name="End Time")
secondary_user = models.ForeignKey(User, verbose_name="Backup OnCall Engineer", unique=True,blank=True,null=True)
s_start_time = models.DateTimeField(blank=True,null=True, verbose_name="Start Time")
s_end_time = models.DateTimeField(blank=True,null=True,verbose_name="Start Time")
ERRORS:
oncall.ManualRotas.primary_user: (fields.E304) Reverse accessor for 'ManualRotas.primary_user' clashes with reverse accessor for 'ManualRotas.secondary_user'.
HINT: Add or change a related_name argument to the definition for 'ManualRotas.primary_user' or 'ManualRotas.secondary_user'.
oncall.ManualRotas.secondary_user: (fields.E304) Reverse accessor for 'ManualRotas.secondary_user' clashes with reverse accessor for 'ManualRotas.primary_user'.
HINT: Add or change a related_name argument to the definition for 'ManualRotas.secondary_user' or 'ManualRotas.primary_user'.
WARNINGS:
oncall.ManualRotas.primary_user: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField.
HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.
oncall.ManualRotas.secondary_user: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField.
HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.
System check identified 4 issues (0 silenced).
You have to define different related_name
to both the ForeignKeys
columns. For example:
class ManualRotas(models.Model):
primary_user = models.ForeignKey(User, related_name='related_primary_manual_roats', unique=True, verbose_name="Primary OnCall Engineer")
# related names ^ v
secondary_user = models.ForeignKey(User, related_name='related_secondary_manual_roats', verbose_name="Backup OnCall Engineer", unique=True,blank=True,null=True)
# .... Other columns
Please also refer ForeignKey.related_name
document, which says:
The name to use for the relation from the related object back to this one. It’s also the default value for
related_query_name
(the name to use for the reverse filter name from the target model). See the related objects documentation for a full explanation and example. Note that you must set this value when defining relations on abstract models; and when you do so some special syntax is available.
Related posts:
这篇关于Django - 将多个外键用于同一型号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!