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.