2009-02-12 7 views
29

Je veux avoir deux clés étrangères sur le même modèle:Comment puis-je avoir deux clés étrangères pour le même modèle dans Django?

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

Je reçois des erreurs telles que:

accesseur pour des affrontements « » exemple1 sur le terrain avec un domaine connexe « Example.test_set ». Ajoutez un argument related_name à la définition de 'example1'.

Répondre

17

Django utilise la magie de python pour définir les relations entre les modèles, dont certains consiste à utiliser le nom des modèles dans les relations (c'est là que le « test » dans ' test__set 'vient de.) Ce qui se passe, je suppose, c'est qu'il essaie de mettre "test__set" dans le modèle Exemple deux fois, une fois pour chaque clé étrangère que vous avez définie. Le message d'erreur suggère quelque chose à essayer: définir un argument related_name (en remplaçant l'un de ces 'test_set') qu'il peut utiliser au lieu d'autogénérer deux noms en conflit.

Plus d'info here

+2

Ce lien d'information ne fonctionne plus –

92

Essayez d'utiliser related_name:

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

J'ai deux modèles dans l'application qui essaie de le faire. La seconde fonctionne bien avec cette méthode: elle doit avoir des clés étrangères au premier modèle. Le premier modèle ne fonctionne pas. Peut-être que c'est parce que cela fait référence à un modèle importé à la place. Est-ce que quelqu'un a fait ce travail avec des modèles importés? – SpiRail

7

Faites ce que le message d'erreur vous dit de faire, et si vous ne savez pas ce que cela signifie, consultez la documentation de related_name.

Questions connexes