web-dev-qa-db-fra.com

Comment puis-je avoir deux clés étrangères du même modèle dans Django?

Je veux avoir deux clés étrangères pour le même modèle:

class Test(models.model):
    example1 = models.ForeignKey(Example)
    example2 = models.ForeignKey(Example)

Je reçois des erreurs comme:

L'accesseur du champ 'exemple1' entre en conflit avec le champ associé 'Exemple.test_set'. Ajoutez un argument de nom_relatif à la définition de 'exemple1'.

35
MikeN

Django utilise un peu de magie python pour définir les relations entre les modèles, notamment en utilisant le nom des modèles dans les relations (c'est de là que vient le 'test' dans 'test__set'.) Ce qui se passe, je suppose, est que c'est essayez de mettre "test__set" dans le modèle Example deux fois, une fois pour chaque clé étrangère que vous avez définie.

Le message d'erreur suggère quelque chose à essayer: définissez un argument related_name (en remplaçant l'un de ces 'test_set') qu'il peut utiliser au lieu de générer automatiquement deux noms en conflit.

Plus d'infos ici : page a été supprimée

Page courante relative aux relations de modèle: https://docs.djangoproject.com/fr/2.0/ref/models/fields/#module-Django.db.models.fields.related

21
Matt

Essayez d’utiliser related_name :

class Test(models.model):
    example1 = models.ForeignKey('Example', related_name='example1')
    example2 = models.ForeignKey('Example', related_name='example2')
101
strager

Faites juste ce que le message d'erreur vous dit, et si vous n'êtes pas sûr de ce que cela signifie, consultez la documentation de related_name.

7
James Bennett

Dans Django 2.0, essayez ceci:

user = models.ForeignKey(User, on_delete=models.PROTECT, null=True,  related_name='user')
paper = models.ForeignKey(paperRecord, on_delete=models.PROTECT, null=True,  related_name='paper')
0
Pranjal Kushwaha