2009-02-12 15 views
29

chcę mieć dwa klucze obce do tego samego modelu:Jak mogę mieć dwa klucze obce dla tego samego modelu w Django?

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

pojawiają się błędy takie jak:

Accessor do starć pole '' example1 z powiązanymi polu 'Example.test_set'. Dodaj argument related_name do definicji dla "example1".

Odpowiedz

17

Django używa niektóre Pythona magii do definiowania relacji między modelami, z których część wiąże się używając nazwy modeli w relacji (to gdzie „test” w ' test__set "pochodzi.) To, co się dzieje, jak przypuszczam, polega na tym, że próbuje dwa razy" test__set "w modelu Example, raz dla każdego zdefiniowanego klucza obcego.

Komunikat o błędzie sugeruje, aby spróbować: zdefiniuj argument related_name (przesłonięcie jednego z tych zestawów testowych), którego może użyć zamiast autogenerowania dwóch nazw kolidujących.

Więcej informacji here

+2

Ten dodatkowy link informacyjny nie działa –

92

Spróbuj użyć related_name:

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

Mam dwa modele w aplikacji, które próbują to zrobić. Drugi działa dobrze z tą metodą: ma do obcych kluczy do pierwszego modelu. Pierwszy model nie działa. Może dlatego, że w zamian odwołuje się do zaimportowanego modelu. Czy ktoś wykonał tę pracę z importowanymi modelami? – SpiRail

7

Wystarczy robić to, co mówi się komunikat o błędzie, aby to zrobić, a jeśli nie masz pewności, co to znaczy, należy skonsultować się z dokumentacją related_name.

Powiązane problemy