Django管理员无法看到所有条目

时间:2013-10-29 12:05:38

标签: django django-models django-admin

我按照Practical Django Project写博客。但更改列表仅显示状态为LIVE的条目。虽然状态为DRAFT和HIDDEN的其他条目存储在数据库中,但它们不会显示在更改列表中。有人可以帮帮我吗?谢谢。

流动是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)

2 个答案:

答案 0 :(得分:4)

根据文件:

“...... Django遇到的第一个管理器(按照它们在模型中定义的顺序)具有特殊状态.Django将类中定义的第一个Manager解释为”默认“管理器”

因此,请确保在objects=models.Manager()

之前live=LiveManager()

答案 1 :(得分: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
       ...

或者您可以在Post模型中设置_default_manager =对象。