Django Admin消息定制

Django admin 真是一个强大的东西,轻轻松松就能搭好一个网站的后台,大部分的功能都能知足。它也自带了操做后的消息提醒。具体能够查看文档Admin actions。文档中有很是简单的给用户发送消息的方法,即:python

self.message_user(request, message)

可是这样的消息都是“操做成功”的消息,消息前面带的是一个绿色勾的图标。而不少时候须要对错误的操做和未成功的操做给出提示,这也的提示消息显然不行。django

这也很简单,Django中带有messages模块,能够作出各类消息定制。Django真是一个大而全的框架。app

直接上代码:框架

from django.contrib import admin
 from models import Category, Group, Topic, Report, Applicant 
 from django.contrib import messages
 class ApplicantAdmin(admin.ModelAdmin):
    list_display = ('applicant', 'group', 'reason', 'join_type', 'status')
    list_filter = ('group', 'join_type', 'status')
    actions = ['pass_apply', 'reject_apply']  

    def pass_apply(self, request, queryset):
        """ 经过申请 @fanlintao """
        can_treat = True
        for q in queryset:
            if q.status != 'processing':
                can_treat = False
                continue
        if can_treat:
            for q in queryset:
                if q.join_type == "manager":
                    q.group.manager.add(q.applicant)  # 将申请人加进小组管理员
                    q.status = "pass"
                    q.save()
                elif q.join_type == "member":
                    q.group.member.add(q.applicant)   # 将申请人加进组员
                    q.status = "pass"
                    q.save()
            msg = u"已经经过全部申请"
            self.message_user(request, msg)
        else:
            msg = u"只有状态为processing的记录能操做,请确认!"
            messages.add_message(request, messages.ERROR, msg)
    pass_apply.short_description = u"经过申请"  

    def reject_apply(self, request, queryset):
        """ 拒绝申请 @fanlintao """
        can_treat = True
        for q in queryset:
            if q.status != 'processing':
                can_treat = False
                continue
        if can_treat:
            queryset.update(status="reject")
            msg = u"已经驳回全部申请"
            self.message_user(request, msg)
        else:
            msg = u"只有状态为processing的记录能操做,请确认!"
            messages.add_message(request, messages.ERROR, msg)

    reject_apply.short_description = u"拒绝申请"
admin.site.register(Applicant, ApplicantAdmin)

使用定制的add_message方法就能完成一个错误的消息提醒啦。虽然仍是比较简陋,只是消息前换了个红色的图标,但对于后台也够用啦。网站

PS:看来还要好好看看Django的messages模块了。code

相关文章
相关标签/搜索