我正在创建简单的博客和面对问题。我需要在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
答案 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']