带有related_name的Django自引用外键不起作用

时间:2014-08-18 18:06:26

标签: django foreign-keys foreign-key-relationship

我跟着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关系,因为一个人可以被认为是多个人(或零)的最好朋友,但只能考虑一个(或零)人,他/她最好的朋友。

谢谢!

1 个答案:

答案 0 :(得分:2)

发现错误!我正在使用一个过滤掉结果的自定义管理器(代码的另一部分需要)。对于那个很抱歉! :)