简体   繁体   English

如何使相同模型的两个外键一起唯一?

[英]How to make two foreign keys to same model unique together?

Let's say I have a relationship class such as: 假设我有一个关系类,例如:

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

so I want to make this object unique for a pair of Person s. 所以我想使该对象对于一对Person是唯一的。 If I simply do unique_together = (("person1", "person2"),) then I can end up with two Friendship objects where 如果我只做unique_together = (("person1", "person2"),)那么我可以得到两个Friendship对象,其中

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

I do not want this. 不想这样。 I want a unique friendship object between two people. 我想要两个人之间一个独特的友谊对象。 So how can I ensure that there is -at most- one Friendship object for any pair of Person s? 那么,如何确保任何一对Person最多有一个“ Friendship对象?

Thanks ! 谢谢 !

I suggest you to use model.clean method: 我建议您使用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')})

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

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