Django admin 真是一个强大的东西,轻轻松松就能搭好一个网站的后台,大部分的功能都能满足。它也自带了操作后的消息提醒。具体可以查看文档Admin actions。文档中有非常简单的给用户发送消息的方法,即:
self.message_user(request, message)
但是这样的消息都是“操作成功”的消息,消息前面带的是一个绿色勾的图标。而很多时候需要对错误的操作和未成功的操作给出提示,这也的提示消息显然不行。
这也很简单,Django中带有messages模块,可以做出各种消息定制。Django真是一个大而全的框架。
直接上代码:
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模块了。