178 votes

Django : Pourquoi des champs de modèle s’affrontent entre eux ?

Je veux créer un objet qui contient 2 liens aux utilisateurs. Par exemple :

mais j’obtiens les erreurs suivantes lorsque vous exécutez le serveur :

  • ``
  • ``

Pouvez-vous s’il vous plaît expliquer pourquoi je reçois les erreurs et les corriger ?

297voto

Daniel Roseman Points 199743

Vous avez deux clés étrangères à utilisateur. Django crée automatiquement une relation inverse de l’utilisateur vers GameClaim, qui est habituellement . Cependant, parce que vous avez deux FKs, vous auriez deux attributs, ce qui est évidemment impossible. Si vous devez dire Django quel nom à utiliser pour la relation inverse.

Utilisation du `` attribut à la définition de la FK. par exemple

8voto

Hank Gay Points 36173

L' User modèle est d'essayer de créer deux champs portant le même nom, l'un pour l' GameClaims dont User le target, et un autre pour l' GameClaims dont User le claimer. Voici les docs sur related_name, qui est de Django reinhardt façon de vous permettant de définir les noms des attributs de sorte que le générés automatiquement ne sont pas en conflit.

7voto

Pascal Polleunus Points 887

L'OP n'est pas à l'aide d'une classe de base abstraite... mais si vous êtes, vous trouverez que le codage en dur des le related_name dans le FK (par exemple,..., related_name="monnom") va entraîner un certain nombre de ces erreurs de conflit - un pour chaque classe héritée de la classe de base. Le lien fourni ci-dessous contient la solution de contournement, qui est simple, mais certainement pas évident.

Du django docs...

Si vous utilisez le related_name attribut sur une ForeignKey ou ManyToManyField, vous devez toujours spécifier un unique inverse nom pour le champ. Cela devrait provoquer un problème dans les classes de base abstraites, depuis les champs de cette classe sont inclus dans chaque de l'enfant classes, avec exactement les mêmes valeurs pour les attributs (y compris related_name) à chaque fois.

Plus d'infos ici.

0voto

Jordan Hagan Points 116

Me semble de croiser ce de temps en temps quand j'ajoute un sous-module comme une application à un projet django, par exemple, compte tenu de la structure suivante:

myapp/
myapp/module/
myapp/module/models.py

Si j'ai ajouter la ligne suivante à INSTALLED_APPS:

'myapp',
'myapp.module',

Django semble traiter les myapp.mymodule models.py fichier deux fois et jette l'erreur ci-dessus. Ce problème peut être résolu en n'incluant pas le module principal dans le INSTALLED_APPS liste:

'myapp.module',

Y compris l' myapp au lieu de myapp.module provoque toutes les tables de base de données doit être créée avec des noms incorrects, donc cela semble être la façon correcte de le faire.

Je suis tombé sur ce post en cherchant une solution à ce problème donc pensé que je l'avais mis ça ici :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X