在django管理页面中显示帖子但不在网站上

时间:2016-07-27 08:16:32

标签: django

我正在创建简单的博客和面对问题。我需要在Django管理页面中有单独类型的帖子,这些帖子将被保存,但不会在网站上显示。例如,当有人建议发帖时,我想首先阅读它并在发布之后,或者当我写一篇文章并希望在一段时间后继续我需要保存它。

博客/ models.py

class Post(models.Model):
    author = models.ForeignKey(User, default=1)
    title = models.CharField(max_length = 50)
    pub_date = models.DateTimeField(default=timezone.now)
    content = models.TextField(max_length = 50000)
    published = models.BooleanField(default=False)

    def __str__(self):
        return self.title
    def get_absolute_url(self):
        return "/blog/%i/" % self.pk

博客/ admin.py

class PostAdmin(admin.ModelAdmin):
    fieldsets = (
        ('Title',   {'fields' : ['title']}),
        ('Date',    {'fields' : ['pub_date'], 'classes' : ['collapse']}),
        ('Content', {'fields' : ['content']}),
    )
    list_display = ('title', 'pub_date')
    list_filter = ['pub_date']
    search_fields = ['title']

admin.site.register(Post, PostAdmin)

博客/ views.py

class PostsListView(ListView):
    model = Post

1 个答案:

答案 0 :(得分:0)

您可以修改列表视图,仅通过覆盖get_queryset来显示已发布的帖子。

class PostsListView(ListView):
    model = Post

    def get_queryset(self):
        return super(PostsListView, self).get_queryset().filter(published=True)

如果您有详细视图,则应以相同方式覆盖get_queryset

在模特管理员中,您可以将published添加到list_filter。这样可以轻松过滤已发布/未发布的帖子。

class PostAdmin(admin.ModelAdmin):
    ...
    list_filter = ['pub_date', 'published']