Django管理员自定义

时间:2011-04-27 11:46:50

标签: python django django-admin django-templates customization

我正在设计一个管理界面,邀请邮件会发送给用户。我的邀请模型准备就绪;在我的邀请管理界面中,我能够看到管理员可以发送电子邮件邀请的我添加的用户。 admin interface so far

现在我想稍微自定义一下。我想为每一行添加一个SEND按钮,它实际上会向该用户发送一封电子邮件。发送电子邮件功能等都已准备就绪。我不知道如何自定义此管理模板以添加send按钮。有人可以帮忙吗?或者至少指出我正确的方向......

P.S:它不一定是发送按钮,它可能是“动作”下拉列表的一部分,对于我可以联合发送电子邮件的所选用户。

2 个答案:

答案 0 :(得分:4)

我的解决方案是在管理界面中添加“发送邀请”操作

“发送邀请”操作

您可以参考django管理员操作文档here。 以下是您的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)

我还没有测试过这段代码,但它几乎是你需要的。希望这会有所帮助。

答案 1 :(得分: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

关于操作的使用,在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
    ]