2013-03-08 18 views
95

Jestem trochę nowy w aplikacjach internetowych i bazach danych w ogóle, więc to może być głupie pytanie. Chcę utworzyć model ("CategoryModel") z polem wskazującym na główny identyfikator innej instancji modelu (jego rodzica).Django - własny klucz do cudzysłowu

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

Jak to zrobić? Dzięki!

Odpowiedz

156

Można przekazać nazwę modelu jako ciąg do ForeignKey i zrobi to, co trzeba.

Więc:

parentId = models.ForeignKey("CategoryModel") 

Albo można użyć ciąg „ja”

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

Albo po prostu użyć 'self' –

+0

Były nie wydają się działać jako klasa CategoryModel nie została jeszcze określona, ​​ale ten robi. (Django 1.5.4) Robię coś nie tak? – szabgab

+3

@szabgab Działa, gdy nazwa modelu zostanie przekazana jako ciąg. – Vaughan

37

Można użyć ciąg „ja”, aby wskazać samoodnoszenie.

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

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

+5

Myślę, że masz na myśli "siebie". Podobnie jak w ciągu znaków. self jest niezdefiniowane w tym kontekście –

+0

Dobry połów. Dzięki – Brandon

+0

@Bandon Czym różni się "self" w twojej odpowiedzi od tego, co jared powiedział w swoim komentarzu? "Myślę, że masz na myśli" siebie "!!! . Oba są ciągami, które są w porządku, zgodnie z dokumentacją django. ! Wszelkie wskazówki – Stryker

Powiązane problemy