2017-02-04 4 views
2

У меня есть эта модель:Джанго related_name не найдено

class Person(models.Model): 
    something ... 
    employers = models.ManyToManyField('self', blank=True, related_name='employees') 

Когда я person.employees.all() я получаю эту ошибку: 'Person' object has no attribute 'employees'. Связанное имя создается только при наличии фактической ссылки. Если да, то как я могу это проверить?

EDIT: Я знаю о функции hasattr(). Мне все еще интересно, почему атрибут не возвращает пустой список, когда нет связанных объектов.

ответ

3

Чтобы использовать связанное имя с рекурсивным много-ко многим, вам необходимо установить symmetrical=False. Без него Django не добавит атрибут employees к классу. Из docs:

When Django processes this model, it identifies that it has a ManyToManyField on itself, and as a result, it doesn’t add a person_set attribute to the Person class. Instead, the ManyToManyField is assumed to be symmetrical – that is, if I am your friend, then you are my friend.

Таким образом, вы можете добавить symmetrical=False в поле:

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

person.employees.all() # will work now 

или просто использовать employers атрибут:

person.employers.all() 
+1

Благодаря кучу! – rwms

Смежные вопросы