【问题标题】:How to make two foreign keys to same model unique together?如何使同一模型的两个外键一起唯一?
【发布时间】:2015-10-30 21:55:28
【问题描述】:

假设我有一个关系类,例如:

class Friendship(models.Model):
    person1 = models.ForeignKey(Person, related_name='person1')
    person2 = models.ForeignKey(Person, related_name='person2')

所以我想让这个对象对一对Persons 是唯一的。如果我只是简单地做unique_together = (("person1", "person2"),),那么我最终可以得到两个Friendship 对象,其中

FS1.person1 = A, FS1.person2 = B
FS2.person1 = B, FS2.person2 = A

我确实想要这个。我想要两个人之间独特的友谊对象。那么如何确保任何一对Persons 最多有一个Friendship 对象?

谢谢!

【问题讨论】:

  • @Gocht 谢谢!从那篇文章看来,我可能会选择处理重复的友谊而不是那些:)我希望有一个更简单的方法..
  • 我认为这就是你所需要的,因为对于每一个对称关系来说,槽表中只有一条记录。
  • 看起来像,是的。但我一直害怕与 Django 的多对多关系。无论如何,似乎没有更简单的解决方案?
  • 对于这种情况,存在对称关系,我是这么认为的。

标签: python django foreign-keys unique foreign-key-relationship


【解决方案1】:

我建议你使用 model.clean 方法:

class Friendship(models.Model):
    person1 = models.ForeignKey(Person, related_name='person1')
    person2 = models.ForeignKey(Person, related_name='person2')

    def clean(self):
        direct = FriendShip.objects.filter(person1 = self.person1, person2 = self.person2)
        reverse = FriendShip.objects.filter(person1 = self.person2, person2 = self.person1) 

        if direct.exists() or reverse.exists():
            raise ValidationError({'key':'Message')})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 2016-12-07
    • 1970-01-01
    • 2010-10-07
    相关资源
    最近更新 更多