2013-10-29 38 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模型=对象。