我知道上面的答案确实回答了“为什么会发生冲突”的问题,而且我知道这是一个老问题。但是,我遇到它试图想出一种方法让代码根据另一列中的条目限制一列中的条目。我没有找到足够的答案,但自己设法弄明白了。以下是对未直接提出但可能对其他人有帮助的问题的答案。
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=255)
class Family(models.Model):
mum = models.OneToOneField(Person, on_delete=models.SET_NULL, related_name='family_as_mum', null=True)
dad = models.OneToOneField(Person, on_delete=models.SET_NULL, related_name='family_as_dad', null=True)
def save(self, *args, **kwargs):
if Family.objects.filter(mum=self.dad).exists() or Family.objects.filter(dad=self.mum).exists() or self.mum == self.dad:
return #any person can only be a mum or a dad, not both
else:
super(Family, self).save(*args, **kwargs)
def update(self, *args, **kwargs):
if Family.objects.filter(mum=self.dad).exists() or Family.objects.filter(dad=self.mum).exists() or self.mum == self.dad:
return #same as save, don't want them to update a family member in an invalid way
else:
super(Family, self).update(*args, **kwargs)
@staticmethod
def get_family(person):
if Family.objects.get(mum=person).exists():
return Family.objects.get(mum=person)
elif Family.objects.get(dad=person).exists():
return Family.objects.get(dad=person)
else:
return None
*注意,在这里找到了@staticmethod ,认为拥有一个查找与父母相关的家庭的功能可能很有用,因为我们可能不知道一个人是妈妈还是爸爸