使用Django admin的问题使用中间页面的操作

时间:2011-07-14 07:20:21

标签: python django django-admin django-templates

我通过admin.py添加了管理操作send_EMAIL。我希望当管理员对所选用户使用 send_EMAIL 操作时,它应该显示包含所有选定用户的中间页面并要求确认。在我的情况下请求确认,但当我点击“发送电子邮件”按钮时没有任何反应,我返回到change_list视图,没有调用send_EMAIL动作。

Admin.py

class MyUserAdmin(UserAdmin):
    list_display = ['username', 'email', 'first_name', 'last_name', 'is_active', staff]
    list_filter = ['groups', 'is_staff', 'is_superuser', 'is_active']
    actions = ['send_EMAIL']


    def send_EMAIL(self, request, queryset):
        from django.core.mail import send_mail
        if 'apply' in request.POST:
            for i in queryset:
                if i.email:
                    send_mail('Subject here', 'Here is the message.', 'from@example.com',[i.email], fail_silently=False)
                else:
            self.message_user(request, "Mail sent successfully ")
        else:
            from django.http import HttpResponse
            from django.template import RequestContext, loader
            t = loader.get_template('admin/send_mail.html')
            c = RequestContext(request, {'articles': queryset})
            return HttpResponse(t.render(c),)



admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)

templates / send_mail.html

{% extends "admin/base_site.html" %}

{% block content %}


<form action="" method="post">{% csrf_token %}

    <p>The mail will be send to following users:</p>

    <ul>{{ articles|unordered_list }}</ul>

    <input type="hidden" name="action" value="send_EMAIL" />
    <input type="submit" name="apply" value="Send Email" />
</form>

{% endblock %} 

抱歉英语不好.Plz帮助

1 个答案:

答案 0 :(得分:23)

我找到了一种简单的方法。它对我有用......我希望它有所帮助:

您需要做的是将所选项目“传递”到确认页面并将其包含在表单中以及包含<input type="hidden" name="action" value="admin_action" />,以便django admin知道它仍然应该调用{{1 }}。 admin action只是知道是处理查询集还是呈现确认页面。

post