Джанго самореферентный внешний ключ

120

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

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

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

Теги:
django-orm

2 ответа

189
Лучший ответ

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

Итак:

parentId = models.ForeignKey("CategoryModel")

Или вы можете использовать строку "self"

parentId = models.ForeignKey("self")
  • 10
    Или просто использовать self
  • 0
    Первый, похоже, не работает, поскольку класс CategoryModel еще не определен, но последний работает. (Django 1.5.4) Я что-то не так делаю?
Показать ещё 2 комментария
45

Вы можете использовать строку "self" для указания самореференции.

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

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

  • 7
    Я думаю, что вы имеете в виду «я». Как в строке. Я не определен в этом контексте
  • 0
    Хороший улов. Спасибо
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню