Django - 将多个外键用于同一型号 [英] Django - using multiple foreign key to the same model

查看:1116
本文介绍了Django - 将多个外键用于同一型号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在同一模型中使用相同的外键两个字段,并且收到错误。



我试图拥有一个主要和次要的调用用户,但不知道如何在收到以下错误之后格式化关系。

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆