Django message d'erreur “Ajouter un related_name argument de la définition de”
D:\zjm_code\basic_project>python manage.py syncdb
Error: One or more models did not validate:
topics.topic: Accessor for field 'content_type' clashes with related field 'Cont
entType.topic_set'. Add a related_name argument to the definition for 'content_t
ype'.
topics.topic: Accessor for field 'creator' clashes with related field 'User.crea
ted_topics'. Add a related_name argument to the definition for 'creator'.
topics.topic: Reverse query name for field 'creator' clashes with related field
'User.created_topics'. Add a related_name argument to the definition for 'creato
r'.
topicsMap.topic: Accessor for field 'content_type' clashes with related field 'C
ontentType.topic_set'. Add a related_name argument to the definition for 'conten
t_type'.
topicsMap.topic: Accessor for field 'creator' clashes with related field 'User.c
reated_topics'. Add a related_name argument to the definition for 'creator'.
topicsMap.topic: Reverse query name for field 'creator' clashes with related fie
ld 'User.created_topics'. Add a related_name argument to the definition for 'cre
ator'.
- Ajouter le code de votre modèle
- avez-vous essayé en suivant les instructions du message d'erreur?
- Si vous ne savez pas ce qu'est un "related_name" argument est, le message d'erreur instructions ne sont pas très utiles. Le Django "objets Liés à l'" documents ne sont pas nécessairement de l'aide; ils ne définissent pas un related_name ni de la rendre claire que vous pouvez inventer la valeur que vous souhaitez pour votre related_name.
Vous devez vous connecter pour publier un commentaire.
Vous avez un certain nombre de clés étrangères qui django est pas en mesure de générer des noms uniques pour.
Vous pouvez l'aider en ajoutant "related_name" les arguments de la foreignkey définitions de champ dans vos modèles.
Par exemple:
Voir ici pour plus d'.
http://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name
related_name='+'
+
faire?related_name='+'
ne réprimer l'erreur, mais il note son but - pour vous désabonner de la "marche arrière" lien. C'est à dire:fooo_set
l'utilisation d'une autre instance sera incapable de trouver le cas ici, qui sont de l'utiliser.Exemple:
Ce sera la cause de l'erreur, parce que Django essaie de créer automatiquement vers l'arrière un rapport pour les instances de
accounts.User
pour chaque clé étrangère de la relation à l'utilisateur commeuser.article_set
. Cette méthode par défaut est ambigu. Seraituser.article_set.all()
reportez-vous au mode articles connexes par le champ auteur ou par l'éditeur de champ?Solution:
Maintenant, pour une instance de l'utilisateur
user
, il y a deux différentes méthodes du gestionnaire d':user.author_article_set
--user.author_article_set.all()
sera de retour un Queryset de tous les Article les objets qui ont author == utilisateuruser.editor_article_set
--user.editor_article_set.all()
sera de retour un Queryset de tous les Article les objets qui ont éditeur == utilisateur"Si un modèle a une ForeignKey, les instances de la clé étrangère modèle aurez accès à un Gestionnaire qui renvoie toutes les instances du premier modèle. Par défaut, ce Gestionnaire est nommé FOO_set, où FOO est le nom du modèle source, lowercase."
Mais si vous avez plus d'une clé étrangère dans un modèle, django est pas en mesure de générer des noms uniques pour les étrangers-gestionnaire de clés.
Vous pouvez l'aider en ajoutant "related_name" les arguments de la foreignkey définitions de champ dans vos modèles.
Voir ici:
https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward
Mais dans mon cas, je suis de créer une application à part pour certaines fonctionnalités avec le même nom de modèle et le champ ( copier/coller 😉 ) c'est à cause de ce type d'erreur se produit, je suis juste supprimé l'ancien modèle et le code fonctionne correctement
Peut-être l'aide complète pour les débutants comme moi 🙂
Si vos modèles sont à hériter de la même mère modèle, vous devez définir un unique
related_name
dans le parent de l' ForeignKey. Par exemple:author = models.ForeignKey('accounts.User', related_name='%(app_label)s_%(class)s_related')
C'est mieux expliqué dans la docs
Ce n'est pas une réponse ultime à la question, cependant, pour quelqu'un qu'ils peuvent résoudre le problème.
J'ai eu le même message d'erreur dans mon projet, après vérification d'un très ancien commit (aller à détacher la tête de l'etat) et le code de la base vers l'arrière jusqu'à ce jour. La Solution a été de supprimer tous *.pyc les fichiers dans le projet.
Faire ce que le message d'erreur indique:
related_name="foobar"
? Est-ce correct? Peut-être! Comment puis-je savoir? Je n'ai pas!