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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.