Я пытаюсь просто создать one to many
модель отношений категорий, используя Django amazing ORM.
SQL:
create table categories(
id serial primary key not null,
parent_id int
);
insert into categories values(default,default,default);
update categories set parent_id = 1 where id > 1;
select * from categories;
id | parent_id
----+-----------
2 | 1
3 | 1
1 |
(3 rows)
Модель Django amazing orm:
class Categories(models.Model):
id = models.AutoField(primary_key=True)
parent_id = models.ForeignKey('self')
class Meta:
managed = False
db_table = 'categories'
Запрос Django:
Categories.objects.get(id=1)
ВЫХОД:
django.db.utils.ProgrammingError: column categories.parent_id_id does not exist
LINE 1: SELECT "categories"."id", "categories"."parent_id_id" FROM "...
^
HINT: Perhaps you meant to reference the column "categories.parent_id".
Почему он использует столбец parent_id_id
вместо parent_id
и как я могу заставить его использовать parent_id
?
РЕДАКТИРОВАТЬ
Я только что изменил поле parent_id на parent.
EDIT 2
Ответ tatlar не в моем случае, потому что у меня уже есть схема базы данных.
Итак, после более глубокого изучения документации и других вопросов, связанных со стековым потоком, я получил в результате.Эта модель содержит ссылку на родительские и дочерние категории для каждой строки.Он может быть унаследован для всех моделей данных, аналогичных графу (комментарии, категории и т. Д.).
class Categories(models.Model):
id = models.AutoField(primary_key=True)
parent = models.ForeignKey('self', on_delete=None, parent_link=True, related_name='children')
class Meta:
managed = False
db_table = 'categories'
Получить всех детей для категории 1:
from myapp.models import Categories
ch = Categories.objects.get(id=1).children print (ch)
# <QuerySet [<Categories: Categories object (2)>, <Categories: Categories object (3)>]>
Получить родительских элементов для категории 2:
from myapp.models import Categories
ch = Categories.objects.get(id=1).parent
print (ch)
# <Categories: Categories object (1)>