简体   繁体   English

Django - 对同一模型使用多个外键

[英]Django - using multiple foreign key to the same model

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.你有不同的定义related_name到两个ForeignKeys列。 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:另请参阅ForeignKey.related_name文档,其中说:

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).它也是related_query_name (用于目标模型的反向过滤器名称的名称)的默认值。 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:相关文章:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM