Django,queryset返回selftomany的self

时间:2010-10-17 11:38:08

标签: django many-to-many django-queryset

遵循常规的多种查询集逻辑会给我带来错误。我想因为它与自我有关,我可能需要做一些额外的魔法,但我无法弄清楚是什么魔法。

模型:

class Entry(models.Model):
    title   =   models.CharField(max_length=100, verbose_name='title')
    related     =   models.ManyToManyField('self', related_name='related_entries', blank=True)

查询集:

entry = Entry.objects.get(pk=1)
related = entry.related_entries.all()

错误:'Entry'对象没有属性'related_entries'

1 个答案:

答案 0 :(得分:8)

查看ManyToManyField的{​​{3}}参数的文档:

  

当Django处理这个模型时,它会识别出它自身有一个ManyToManyField,因此它不会向Person类添加person_set属性。相反,ManyToManyField被认为是对称的 - 也就是说,如果我是你的朋友,那么你就是我的朋友。

     

如果您不想在与self的多对多关系中进行对称,请将symmetrical设置为False。这将强制Django为反向关系添加描述符,允许ManyToManyField关系是非对称的。

因此,要使用related_name,请设置symmetrical=False