我跟着this question创建了一个用ForeignKey指向自己的模型。我刚刚添加了related_name选项。该模型如下所示:
class Person(models.Model):
name = models.CharField(max_length=100)
best_friend = models.ForeignKey('self', blank=True, null=True,
related_name='considered_best_friend_for')
def __unicode__(self):
return self.name
然后我做了以下事情:
>>> a = Person.objects.create(name='Albert')
>>> a.save()
>>> j = Person.objects.create(name='John')
>>> j.save()
>>> m = Person.objects.create(name='Mark')
>>> m.save()
>>> a.best_friend = m
>>> a.save()
>>> j.best_friend = m
>>> j.save()
>>> m.considered_best_friend_for.all()
[]
>>> m.considered_best_friend_for
<django.db.models.fields.related.RelatedManager object at 0x102503190>
我不明白为什么当我查询m.considered_best_friend_for.all()
时,我得到一个空结果[]
。我期待得到[<Albert>, <John>]
。但是,如果我查询m.considered_best_friend_for
,我会得到RelateManager对象。
错误在哪里?
注意:我尝试使用相同的代码更改ManyKoMany关系的ForeignKey并且它有效,但在这种情况下我需要一个ForeignKey关系,因为一个人可以被认为是多个人(或零)的最好朋友,但只能考虑一个(或零)人,他/她最好的朋友。
谢谢!
答案 0 :(得分:2)
发现错误!我正在使用一个过滤掉结果的自定义管理器(代码的另一部分需要)。对于那个很抱歉! :)