Django: accesseurs inversés pour les conflits de clés étrangères

113

J'ai deux modèles Django qui héritent d'une classe de base:

- Request
    - Inquiry
    - Analysis

Request a deux clés étrangères pour le modèle utilisateur intégré.

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

Pour une raison quelconque, j'obtiens l'erreur

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

Tout ce que j'ai lu dit que le réglage de related_namedevrait empêcher le conflit, mais j'obtiens toujours la même erreur. Quelqu'un peut-il penser à pourquoi cela se produirait? Merci!

Rob
la source
1
Pouvez-vous s'il vous plaît poster vos définitions de modèle, y compris Inquiryet Analysiset leur relation avecRequest
dm03514
lien mis à jour pour le nom associé dans Django 1.9
Seb

Réponses:

138

Le related_nameferait en sorte que les champs ne sont pas en conflit les uns avec les autres, mais vous avez deux modèles, dont chacun a ces deux domaines. Vous devez mettre le nom du modèle concret dans chacun d'eux, ce que vous pouvez faire avec une substitution de chaîne spéciale :

 create_user = models.ForeignKey(User, related_name='%(class)s_requests_created')
Daniel Roseman
la source
1
Le lien dans votre réponse est mort.
Matt D
2
@MatthewDrill J'ai soumis une modification pour le corriger, en attendant, essayez docs.djangoproject.com/en/1.10/topics/db/models/…
Ivan
Très bonne réponse! Je vous remercie!
Tms91