找不到Django related_name

rwm*_*wms 3 python django orm

我有这个模型:

class Person(models.Model):
    something ...
    employers = models.ManyToManyField('self', blank=True, related_name='employees')
Run Code Online (Sandbox Code Playgroud)

当我做person.employees.all()我得到这个错误:'Person' object has no attribute 'employees'。仅当存在实际链接时才创建相关名称。如果是,我该如何检查?

编辑:我知道该hasattr()功能。我仍然想知道为什么在没有相关对象的情况下属性不返回空列表。

nev*_*ner 6

要对多对多递归使用related_name,您需要set symmetrical=False。没有它,Django将不会employees向该类添加属性。从文档

Django处理此模型时,会确定其自身具有ManyToManyField,因此,不会向Person类添加person_set属性。相反,假定ManyToManyField是对称的-也就是说,如果我是您的朋友,那么您就是我的朋友。

因此,您可以添加symmetrical=False到字段:

employers = models.ManyToManyField('self', blank=True, related_name='employees', symmetrical=False)

person.employees.all() # will work now
Run Code Online (Sandbox Code Playgroud)

或者只是使用employers属性:

person.employers.all()
Run Code Online (Sandbox Code Playgroud)