2013-12-14 101 views
1

這是原來的類模型:訂購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

我遇到了這個問題。問題不在於包django-mptt,而在框架Django中,更確切地說是在管理員中。也許這是由於幾個管理員同時工作。雖然只有一種解決方案 - 以放棄管理類中的list_editable或爲Ajax編寫具有相同字段order的腳本。

爲了恢復樹,請使用rebuld方法:Category.tree.rebuild()