代码之家  ›  专栏  ›  技术社区  ›  dabadaba

如何共享相关名称?

  •  0
  • dabadaba  · 技术社区  · 5 年前

    我正在尝试创建一个模型来表示两个场馆之间的旅行时间,因此它有两个外键 Venue 型号:

    class VenueTravel(models.Model):
        venue1 = models.ForeignKey('Venue', related_name='travel_times')
        venue2 = models.ForeignKey('Venue', related_name='travel_times')
        minutes = models.IntegerField(default=0, validators=[MinValueValidator(0)])
    
        class Meta:
            unique_together = ('venue1', 'venue2')
    

    venue1 属于 venue2 ),我真的不在乎给他们起不同的名字。事实上,我想给他们起个相同的名字。

    我有办法做到吗?

    0 回复  |  直到 5 年前
        1
  •  2
  •   Niel Godfrey Pablo Ponciano    5 年前

    我认为这样的行为是为了解决歧义,因为 related_name 将使用外键模型(此处为 Venue )将有权访问每个模型(此处仅为 VenueTravel )这已经通过每个相关字段与之相关,因此多个字段具有相同名称的模糊性(尽管正如您所指出的,它们只是引用相同的模型)。

    您可以选择使用不同的相关名称:

    venue1 = models.ForeignKey('Venue', related_name='from_travel_times')
    venue2 = models.ForeignKey('Venue', related_name='to_travel_times')
    

    here

    如果模型包含同一模型的多个外键, 你需要 解决歧义 手动使用fk_名称。对于 例如,考虑以下模型

    class Friendship(models.Model):
        from_friend = models.ForeignKey(
            Friend,
            on_delete=models.CASCADE,
            related_name='from_friends',
        )
        to_friend = models.ForeignKey(
            Friend,
            on_delete=models.CASCADE,
            related_name='friends',
        )
        length_in_months = models.IntegerField()
    

    Here 是另一份说明如何处理此类情况的文件:

    使用同一父模型具有两个或多个外键的模型

    有时可能有多个外键指向同一个外键 模型以这个模型为例:

    from django.db import models
    
    class Friendship(models.Model):
        to_person = models.ForeignKey(Person, on_delete=models.CASCADE, related_name="friends")
        from_person = models.ForeignKey(Person, on_delete=models.CASCADE, related_name="from_friends")
    

    相关名称 :