2013-03-08 15 views
95

Sono un po 'nuovo alle applicazioni web e alle informazioni di database in generale, quindi questa potrebbe essere una domanda stupida. Voglio fare un modello ("CategoryModel") con un campo che punta all'id principale di un'altra istanza del modello (il suo genitore).Chiave esterna autoreferenziale Django

class CategoryModel(models.Model): 
    parentId = models.ForeignKey(CategoryModel) 

Come posso fare? Grazie!

risposta

156

È possibile passare il nome di un modello come stringa a ForeignKey e farà la cosa giusta.

Quindi:

parentId = models.ForeignKey("CategoryModel") 

Oppure si può utilizzare la stringa "sé"

parentId = models.ForeignKey("self") 
+7

o semplicemente usare 'self' –

+0

Il primo non sembra funzionare come la classe CategoryModel non è ancora definita, ma quest'ultimo fa. (Django 1.5.4) Sto facendo qualcosa di sbagliato? – szabgab

+3

@szabgab Funziona quando il nome del modello viene passato come una stringa. – Vaughan

37

È possibile utilizzare la stringa 'auto' per indicare un autoreferenzialità.

class CategoryModel(models.Model): 
    parentId = models.ForeignKey('self') 

https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

+5

Penso che tu intenda "io". Come nella stringa. auto non è definito in questo contesto –

+0

Buona cattura. Grazie – Brandon

+0

@Brandon Com'è il "sé" nella tua risposta diverso da quello che Jared ha detto nel suo commento? "Penso che tu intenda" te stesso "!!! . Entrambi sono una stringa che va bene secondo i documenti di Django. ! Qualsiasi suggerimento – Stryker

Problemi correlati