遵循常规的多种查询集逻辑会给我带来错误。我想因为它与自我有关,我可能需要做一些额外的魔法,但我无法弄清楚是什么魔法。
模型:
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'
答案 0 :(得分:8)
查看ManyToManyField
的{{3}}参数的文档:
当Django处理这个模型时,它会识别出它自身有一个ManyToManyField,因此它不会向Person类添加person_set属性。相反,ManyToManyField被认为是对称的 - 也就是说,如果我是你的朋友,那么你就是我的朋友。
如果您不想在与self的多对多关系中进行对称,请将symmetrical设置为False。这将强制Django为反向关系添加描述符,允许ManyToManyField关系是非对称的。
因此,要使用related_name
,请设置symmetrical=False
。