文章状态有三个:草稿、公开、仅个人可见。
从撰文的流程分析:撰文保存,即为草稿状态;发布文章,即设置公开,所有人可见;撤回公开,即设置仅个人可见。
summerdawn博客仅向所有人展示文章状态为公开的文章。当个人登录时,还展示登录用户的所有文章。
代码实现
- 首先model.py里Post类增加相应状态字段:
STATUS_CHOICES = (
('d', '草稿'),
('p', '已发布'),
('w', '已撤回'),
)
class Post(models.Model):
……
status = models.CharField('状态',max_length=1, choices=STATUS_CHOICES,default='d')
#('d', 'Draft'), ('p', 'Published'), ('w', 'Withdrawn')
……
默认即为草稿状态。
- 然后在admin.py里PostAdmin类增加两个命令,公开发布、仅个人可见,以此管理文章状态。
class PostAdmin(admin.ModelAdmin):
list_display = [……,'status',……]
……
def make_published(self, request, queryset):
rows_updated = queryset.update(status='p')
if rows_updated == 1:
message_bit = "1 post was"
else:
message_bit = "%s posts were" % rows_updated
self.message_user(request, "%s successfully marked public." % message_bit)
make_published.short_description = '公开发布'
def make_withdrawn(self, request, queryset):
rows_updated = queryset.update(status='w')
if rows_updated == 1:
message_bit = "1 post was"
else:
message_bit = "%s posts were" % rows_updated
self.message_user(request, "%s successfully marked private." % message_bit)
make_withdrawn.short_description = '仅个人可见'
actions = [make_published,make_withdrawn]
……
当然list_display列表中应添加status字段,以呈现文章状态。
- 在view.py中增加相应文章列表过滤。
post_list = Post.objects.filter(status='p')
if request.user.is_authenticated:
post_list=Post.objects.filter(Q(author=request.user)|Q(status='p'))
Last Modified·2017年7月4日 18:55
您尚未登录,请先登录才能评论。