2009-02-12 19 views
29

Voglio avere due chiavi esterne allo stesso soggetto:Come posso avere due chiavi esterne per lo stesso modello in Django?

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

ricevo errori come:

di accesso per gli scontri sul campo '' Example1 con relativo campo 'Example.test_set'. Aggiungi un argomento related_name alla definizione per 'example1'.

risposta

17

Django utilizza qualche magia python per definire le relazioni tra i modelli, alcuni dei quali coinvolge usando il nome dei modelli nei rapporti (che è dove il 'test' in ' test__set 'sta venendo.) Quello che sta accadendo, direi, è che sta cercando di mettere "test__set" nel modello Example due volte, una volta per ogni chiave esterna che hai definito.

Il messaggio di errore suggerisce di provare: definire un argomento related_name (ignorando uno di quelli 'test_set') che può utilizzare invece di generare automaticamente due nomi in conflitto.

Maggiori informazioni here

+2

Questo ulteriore collegamento alle informazioni non funziona più –

92

Provare a utilizzare related_name:

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

Ho due modelli in app che tenta di farlo. Il secondo funziona bene con questo metodo: ha le chiavi estranee al primo modello. Il primo modello non funziona. Forse è perché si riferisce a un modello importato. Qualcuno ha fatto questo lavoro con modelli importati? – SpiRail

7

solo quello che il messaggio di errore ti dice di fare, e se non siete sicuri che cosa significa, consultare la documentazione per related_name.

Problemi correlati