python - 使用字段排序 mptt 树

标签 python django django-mptt

这是原始的类别模型:

class Category(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')

    def __unicode__(self):
        return self.name

    class MPTTMeta:
        order_insertion_by = ['name']

然后我需要订购类别,所以我将其更改如下:

class Category(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    order = models.SmallIntegerField() <<<<<<<<<
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')

    def __unicode__(self):
        return self.name

    class MPTTMeta:
        order_insertion_by = ['order'] <<<<<<<<<

我将 Django 管理声明更改为:

admin.site.register(Category, MPTTModelAdmin)

致:

class CategoryAdmin(MPTTModelAdmin):
    list_display = ('name', 'order')
    list_editable = ('order',)


admin.site.register(Category, CategoryAdmin)

然后,在管理控制面板进行一些编辑后,一切都崩溃了。我无法准确描述发生了什么,但似乎 lftrghtlevelparent_id 搞砸了通过这些变化。

我是否在错误的上下文中使用了 order_insertion_by ?是为了别的事吗?我尝试搜索文档但没有得到有用的答案。

最佳答案

我遇到了这个问题。问题不在 django-mptt 包中,而在 Django 框架中,更准确地说是在管理中。也许这是由于多个管理员同时工作造成的。虽然只有一种解决方案 - 放弃 list_editable 在管理类中或编写具有相同字段order的脚本 Ajax 。

为了恢复树,请使用 rebuld方法:Category.tree.rebuild()

关于python - 使用字段排序 mptt 树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20578704/

相关文章:

python - 直接从 numpy 数据创建 blender 网格?

django - 如何在给定名称的 Django 中导入模型

python - 使用 Django session 中间件进行垃圾收集

Django-mptt 和多个 parent ?

python - 将二维数组写入带分隔符的 csv 文件

python - 我一直在 pygame 中从事一个项目,但即使没有出现错误,玩家移动似乎也不起作用

python - 在数组内查找数组中的特定变量

django - PyCharm 5.1 Beta 2 中 Docker Compose 远程解释器的服务名称

Django 多个缓存后端