我正在创建一个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
列进行排序。这就是我想要的。我该如何实现?