Django: обратные методы доступа для конфликтов внешних ключей

114

У меня есть две модели Django, которые наследуются от базового класса:

- Request
    - Inquiry
    - Analysis

Запрос имеет два внешних ключа для встроенной модели User.

create_user = models.ForeignKey(User, related_name='requests_created')
assign_user = models.ForeignKey(User, related_name='requests_assigned')

По какой-то причине я получаю сообщение об ошибке

Reverse accessor for 'Analysis.assign_user' clashes with reverse accessor for 'Inquiry.assign_user'.

Все, что я прочитал, говорит, что установка related_nameдолжна предотвратить конфликт, но я все равно получаю ту же ошибку. Кто-нибудь может подумать, почему это происходит? Спасибо!

Роб
источник
1
Не могли бы вы опубликовать определения ваших моделей, включая Inquiryи, Analysisи их отношение кRequest
dm03514
обновлена ​​ссылка на связанное имя в Django 1.9
Себ,

Ответы:

139

Это related_nameгарантирует, что поля не конфликтуют друг с другом, но у вас есть две модели, каждая из которых имеет оба этих поля. Вам нужно указать имя конкретной модели в каждой, что вы можете сделать с помощью специальной подстановки строки :

 create_user = models.ForeignKey(User, related_name='%(class)s_requests_created')
Дэниел Розман
источник
1
Ссылка в вашем ответе мертва.
Matt D
2
@MatthewDrill Я отправил правку, чтобы исправить это, а пока попробуйте docs.djangoproject.com/en/1.10/topics/db/models/…
Иван
Отличный ответ! Спасибо!
Tms91