【问题标题】:Ordering mptt tree using a field使用字段排序 mptt 树
【发布时间】:2013-12-14 01:31:04
【问题描述】:

这是原来的类别模型:

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

【问题讨论】:

    标签: python django django-mptt


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2012-09-02
      • 2023-03-04
      相关资源
      最近更新 更多