Django 管理后台自定义
我正在设计一个管理员界面,用来给用户发送邀请邮件。我的邀请模型已经准备好了,在我的邀请管理界面上,我可以看到我添加的用户,管理员可以给他们发送邮件邀请。
现在我想稍微调整一下这个界面。我想在每一行添加一个 SEND
按钮,这样就可以直接给对应的用户发送邮件。发送邮件的功能都已经准备好了,但我不知道怎么修改这个管理员模板来添加这个 send
按钮。有没有人能帮帮我?或者至少给我指个方向……
附注:这个按钮不一定非得是发送按钮,也可以放在一个“操作”下拉菜单里,这样我可以对选中的用户一起发送邮件。
2 个回答
4
下面是我为在管理界面添加“发送邀请”功能的解决方案。
“发送邀请”功能
你可以在这里查看django的管理操作文档:这里。下面是你的admin.py文件应该是什么样子的:
from django.contrib import admin
from myapp.models import MyModel
from django.core.mail import send_mail
class MyModelAdmin(admin.ModelAdmin):
actions = ['send_invite']
def send_invite(self, request, queryset):
# the below can be modified according to your application.
# queryset will hold the instances of your model
for profile in queryset:
send_email(subject="Invite", message="Hello", from_eamil='myemail@mydomain.com', recipient_list=[profile.email]) # use your email function here
send_invite.short_description = "Send invitation"
admin.site.register(MyModel, MyModelAdmin)
我没有测试过这段代码,但基本上就是你需要的。希望这对你有帮助。
4
关于每一行的发送按钮,你可以给你的模型(或者叫ModelAdmin)添加一个新函数,这个函数会返回对应的HTML代码,指向你的视图(或者调用相应的AJAX函数)。只需把这个函数添加到ModelAdmin的“list_display”中,并确保HTML标签不会被转义:
class MyModelAdmin(admin.ModelAdmin):
...
list_display = ('name', 'email', 'sender', 'send_email_html')
def send_email_html(self, obj):
# example using a javascript function send_email()
return '<a href="send_email(%s)">Send Now</a>' % obj.id
send_email_html.short_description = 'Send Email'
send_email_html.allow_tags = True
关于使用操作(action),在你的ModelAdmin中定义“actions”,这个定义是一个列表,里面包含你的函数,这个函数需要接收modeladmin、request和queryset作为参数:
def send_email_action(modeladmin, request, queryset):
whatever_you_want_to_do_with_request_and_queryset
send_email.short_description = 'Send email'
class MyModelAdmin(admin.ModelAdmin):
...
actions = [
send_email_action
]