2013-10-29 2 views
1

나는 실용적인 장고 프로젝트에 따라 블로그를 작성합니다. 그러나 변경 목록에는 상태가 LIVE 인 항목 만 표시됩니다. DRAFT 및 HIDDEN 상태의 다른 항목은 데이터베이스에 저장되지만 변경 목록에는 표시되지 않습니다. 누구든지 나를 도울 수 있습니까? 고맙습니다. "장고 관리자가 모든 항목을 볼 수 없습니다

... 제 관리자 장고 순서 (발견 : 흐르는

여기

class LiveManager(models.Manager): 
    def get_query_set(self): 
    return super(LiveManager,self).get_query_set().filter(status=self.model.LIVE_STATUS) 

class Post(models.Model): 

    LIVE_STATUS=1 
    DRAFT_STATUS=2 
    HIDDEN_STATUS=3 
    STATUS_CHOICES=(
    (LIVE_STATUS,'Live'), 
    (DRAFT_STATUS,'Draft'), 
    (HIDDEN_STATUS,'Hidden') 
    ) 

    status=models.IntegerField(choices=STATUS_CHOICES) 
    category=models.ManyToManyField(Category) 
    title=models.CharField(max_length=100) 
    slug=models.SlugField(max_length=100) 
    content_markdown=models.TextField(blank=True) 
    content_markup=models.TextField(blank=True) 
    pub_date=models.DateTimeField() 
    live=LiveManager() 
    objects=models.Manager() 


    def save(self): 
     self.content_markup=markdown(self.content_markdown,['codehilite']) 
     super(Post,self).save() 

    def __unicode__(self): 
     return '%s'%(self.title) 

이 문서에 따르면 admin.py

class PostAdmin(admin.ModelAdmin): 
    exclude=['content_markup'] 
    prepopulated_fields={'slug':('title',)} 
    list_display=['title','status'] 

class CategoryAdmin(admin.ModelAdmin): 
    prepopulated_fields={'slug':('title',)} 

admin.site.register(Category,CategoryAdmin) 
admin.site.register(Post,PostAdmin) 
+0

무엇이 질문입니까? 당신의'LiveManager'는'status = self.model.LIVE_STATUS'를 필터링하고 있기 때문에 당신에게 다른 항목을주지 않을 것입니다. –

답변

4

이다 model.py이고 Django는 클래스에 정의 된 첫 번째 관리자를 "기본"관리자로 해석합니다.

그래서 objects=models.Manager()이 앞에 오도록하십시오. live=LiveManager()

+0

그것은 작동합니다. 많이 고마워. 나는 오랫동안 컴퓨터를 쳐다 보았다. – user2659536

0

ModelAdmin use self.model._default_manager.

class PostAdmin(admin.ModelAdmin): 

    def queryset(self, request): 
     """ 
     Returns a QuerySet of all model instances that can be edited by the 
     admin site. This is used by changelist_view. 
     """ 
     qs = self.model.objects.get_query_set() 

     ordering = self.get_ordering(request) 
     if ordering: 
      qs = qs.order_by(*ordering) 
     return qs 
     ... 

을 또는 당신은 포스트 모델 = 객체를 _default_manager 설정할 수 있습니다 그래서 당신은 또한 PostAdmin의 방법의 검색어 오버라이드 (override) 할 수 있습니다.

관련 문제