Django,queryset返回selftomany的self

Kas*_*per 3 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)
Run Code Online (Sandbox Code Playgroud)

查询集:

entry = Entry.objects.get(pk=1)
related = entry.related_entries.all()
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*man 8

查看symmetrical参数的文档ManyToManyField:

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

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

所以,为了使用related_name,设置symmetrical=False.