2013-03-08 2 views
95

Я как бы новичок в webapps и базе данных вообще, так что это может быть глупый вопрос. Я хочу создать модель («CategoryModel») с полем, указывающим на первичный идентификатор другого экземпляра модели (ее родителя).Django self-referential foreign key

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

Как это сделать? Благодаря!

ответ

156

Вы можете передать имя модели в виде строки в ForeignKey, и она пойдет правильно.

Итак:

parentId = models.ForeignKey("CategoryModel") 

Или вы можете использовать строку «Я»

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

Или просто использовать 'self' –

+0

бывший, кажется, не работает как класс CategoryModel пока не определена, но последняя делает. (Django 1.5.4) Я делаю что-то неправильно? – szabgab

+3

@szabgab Он работает, как только имя модели передается как строка. – Vaughan

37

Вы можете использовать строку «Я», чтобы указать ссылку на себя.

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

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

+5

Я думаю, вы имеете в виду «я». Как в строке. self не определено в этом контексте –

+0

Хороший улов. Спасибо – Brandon

+0

@Brandon Как «я» в вашем ответе отличается от того, что сказал Джаред в своем комментарии? «Я думаю, вы имеете в виду« я »!!! , Оба являются строками, которые хорошо соответствуют django docs. ! Любые подсказки – Stryker