summerdawn博客说明之文章状态

linxiaoyun 2017.7.4 10:02 1003 1
Django技术 博客说明

文章状态有三个:草稿、公开、仅个人可见

从撰文的流程分析:撰文保存,即为草稿状态;发布文章,即设置公开,所有人可见;撤回公开,即设置仅个人可见。

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

dengli:1#

当晚因为没有及时保存导致一篇文章在编辑过程中网页崩溃。不开心的向小海抱怨,结果小海一声不响连夜改好了。真是心疼

2017年7月4日 10:18


您尚未登录,请先才能评论。