1

我跟着 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)
4

2 回答 2

6

根据文档:

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

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

于 2013-10-29T12:13:27.963 回答
0

ModelAdmin 使用 self.model._default_manager。所以你也可以覆盖 PostAdmin 的 queryset 方法:

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 = objects。

于 2013-10-29T12:43:49.420 回答