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.
是否可以在数据库级别强制执行该唯一性?有没有更好的方法来完成我想要做的事情?
我认为你需要的是使这种关系对称.
您可以通过覆盖模型的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)