这是原始的类别模型:
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)
然后从管理控制台进行一些编辑后,一切都崩溃了。我无法准确描述发生了什么,但lft
,rght
,level
和parent_id
似乎被这些变化搞砸了。
我是否在错误的上下文中使用order_insertion_by
?是为了别的吗?我试图搜索文档,但没有得到有用的答案。
答案 0 :(得分:1)
我遇到了这个问题。问题不在于包django-mptt,而是在Django框架中,更准确地说是在admin中。也许这是由于几位管理员同时工作。虽然只有一个解决方案 - 放弃管理类中的 list_editable
,或者为Ajax编写具有相同字段order
的脚本。
要恢复树,请使用rebuld
方法:Category.tree.rebuild()