django-mptt中order_insertion_by属性的异常行为?

时间:2020-07-12 05:40:40

标签: python django django-mptt mptt

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

0 个答案:

没有答案