2013-10-29 37 views
1

我按照Practical Django Project撰寫博客。但更改列表僅顯示狀態爲LIVE的條目。雖然具有DRAFT和HIDDEN狀態的其他條目存儲在數據庫中,但它們不會顯示在更改列表中。任何人都可以幫助我?謝謝。Django admin無法看到所有條目

流動的model.py

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

根據文檔:

」 ......第一經理Django遇到(順序他們在模型中定義)具有特殊的地位Django將類中定義的第一個Manager解釋爲「默認」管理器「

所以只要確保objects=models.Manager()之前live=LiveManager()

+0

它的工作原理。非常感謝你。我一直盯着電腦這麼久。 – user2659536

0

ModelAdmin使用self.model._default_manager。所以,你也可以重寫查詢集方法PostAdmin的:

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在Post模型=對象。