Я создаю CMS, для хранения иерархии страниц я использую django -mptt. Вот упрощенная версия кода.
from django.db import models
from mptt.models import MPTTModel, TreeForeignKey
class Post(MPTTModel):
title = models.CharField(max_length=50, unique=True)
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
## some columns are omitted
def __str__(self):
return self.name
class MPTTMeta:
order_insertion_by = ['title']
В документации django -mptt указано, что order_insertion_by
используется для определения естественного порядка объектов. Итак, если я установил order_insertion_by = ['title']
. Он упорядочивает все сообщения и дочерние сообщения в порядке возрастания title
. Пока все хорошо.
Однако, если я установлю order_insertion_by
на id
, сообщения будут упорядочены в порядке убывания id
. Почему?
Отладка проблемы также показывает, что в последнем случае выполняется следующий запрос.
SELECT "wiki_post"."id", "wiki_post"."title", "wiki_post"."slug", "wiki_post"."tree_id",
"wiki_post"."level" FROM "wiki_post"
WHERE NOT ("wiki_post"."post_type" = post)
ORDER BY "wiki_post"."tree_id" ASC, "wiki_post"."lft" ASC
Как видите, сообщения упорядочиваются tree_id
и lft
столбец, а не столбец id
. Вот чего я хочу. Как я могу этого добиться?