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!


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')

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.