我在Django应用程序中的同一个类的两个对象之间有一个OneToOne关系.是否有可能强制实现这种关系的独特性?

Joe*_*Joe 14 python database django database-design django-models

我的应用程序中有以下内容:

class University(models.Model):
    ...
    sister_university = models.OneToOneField('self', related_name = 
                        'university_sister_university', 
                        blank=True, null=True, 
                        on_delete=models.SET_NULL)
Run Code Online (Sandbox Code Playgroud)

我只希望大学在这种关系的两个方向上与另一所大学有关.

例如,在数据库中,如果我选择大学A作为大学B的姐妹大学,我只希望被允许选择大学B作为大学A下的姐妹大学.但是,实际上,第二种关系没有得到强制执行.

例如:现在,在Django Admin网站下,如果我首先选择大学A作为大学B的姐妹大学,我仍然可以选择任何其他大学作为大学A姐妹大学的对象.我不仅限于选择大学B.

是否可以在数据库级别强制执行该唯一性?有没有更好的方法来完成我想要做的事情?

Pet*_*bhi 9

我认为你需要的是使这种关系对称.

您可以通过覆盖模型的save()方法来实现此目的University:

def save(self, *args, **kwargs):
    super(University, self).save()
    if self.sister_university:
        self.sister_university.sister_university = self
Run Code Online (Sandbox Code Playgroud)