使用字段订购mptt树

时间:2013-12-14 01:31:04

标签: 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?是为了别的吗?我试图搜索文档,但没有得到有用的答案。

1 个答案:

答案 0 :(得分:1)

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

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