我正在使用Django 1.5,并且正在为一些我认为是非常基本的东西而奋斗。
我有下面的人模型:
class Person(models.Model):
contact_person = models.ManyToManyField(ContactPerson)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
...目标是向模型中添加person的partner。我不想让伴侣或人凌驾于他人之上,他们应该是平等的。换句话说,在查找一个人时,他/她的伴侣也应该出现(如果有)。我需要能够增加一次的伴侣,无论是在女人的或在男人的身边(我不想把他们联系两次)。
我搜索了OneToOneFields的文档,但递归OneToOnes似乎不受支持,也就是说,当我尝试时得到一个NameError (“名称'Person‘没有定义”):
partner = models.OneToOneField(Person, blank=true, null=true)谁能给我指明正确的方向?
发布于 2013-08-16 12:24:22
试试这个:
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
...
partner = models.OneToOneField('self', null=True, blank=True)
def save(self, checkPartner = True, *args, **kwargs):
super(Person, self).save()
if self.partner and checkPartner:
self.partner.partner = self
self.partner.save(checkPartner = False)发布于 2013-08-16 10:22:40
https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
partner = models.OneToOneField('Person', blank=true, null=true)或者换一种方式,如果你在同一堂课
partner = models.OneToOneField('self', blank=true, null=true)在这种情况下,引号就是一切。
def save(self, *args, **kwargs):
# call to super, we want self.partner to be set
super(Person, self).save(*args, **kwargs)
# this is necessary to avoid infinite save loops on partner's save call
# at this point, you have a partner
# this won't work if your partner has already a partner
# but it's easy to go from here
if not self.partner.partner:
self.partner.partner = self
self.partner.save()https://stackoverflow.com/questions/18271001
复制相似问题