2013-12-14 2 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'] <<<<<<<<< 

그리고 나는 변경 장고 관리자 선언에서 :

admin.site.register(Category, MPTTModelAdmin) 

사람 :

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


admin.site.register(Category, CategoryAdmin) 

관리자 제어판에서 몇 가지 사항을 수정하면 모든 것이 무너집니다. 정확히 어떤 일이 일어 났는지는 설명 할 수 없지만 lft, rght, levelparent_id은 이러한 변경 사항이 엉망입니다.

내가 잘못된 문맥에서 order_insertion_by을 사용하고 있습니까? 그것은 다른 무엇인가? 나는 문서를 찾으려고했지만 유용한 대답을 얻지 못했다.

도와주세요.

답변

1

이 문제가 발생했습니다. 문제는 django-mptt 패키지와 Django 프레임 워크, 더 정확하게는 admin에 없습니다. 아마도 이것은 여러 관리자가 동시에 작업해야하기 때문입니다. 에 대한 유일한 해결책은list_editable관리자 클래스을 포기하거나 Ajax에 대해 동일한 필드 order을 쓰는 것입니다.

트리를 복원하려면 다음 방법을 사용하십시오. Category.tree.rebuild()