使用Django管理员操作与中间页面的问题 [英] Problem using Django admin Actions with intermediate pages

查看:297
本文介绍了使用Django管理员操作与中间页面的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I added an admin action send_EMAIL through admin.py.I want when admin uses send_EMAIL action for selected users it should show an intermediate page with all selected users and ask for confirmation.In my case it ask for confirmation but when I click on "send Email" button nothing happens and i got returned to change_list view without send_EMAIL action got called.

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)

模板/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 help

Sorry for bad english .Plz help

推荐答案

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

I found an easy way to do it. It worked for me... I hope it helps:

您需要做的是将选定的项目传递到确认页面,并将它们包含在表单中以及包含< input type =hiddenname =actionvalue =admin_action/> ,以便django管理员知道它仍然应该调用 admin action post 只是要知道是处理查询集还是呈现确认页面。

What you need to do is to "pass" the selected items to the confirmation page and include them in the form as well as including the <input type="hidden" name="action" value="admin_action" /> so that django admin knows that it should still call an admin action. The post is just to know whether to process the query set or render the confirmation page.

# Write your admin action.
# IMPORTANT: Note the context passed to TemplateResponse

from django.contrib.admin import helpers
from django.template.response import TemplateResponse

class MyModelAdmin(admin.ModelAdmin):
    def admin_action(self, request, queryset):
        if request.POST.get('post'):
            # process the queryset here
        else:
            context = {
                'title': _("Are you sure?"),
                'queryset': queryset,
                'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
            }
            return TemplateResponse(request, 'path/to/template.html',
                context, current_app=self.admin_site.name)

# The template
{% extends "admin/base_site.html" %}
{% load i18n l10n %}

{% block content %}
<form action="" method="post">{% csrf_token %}
    <p>The following videos will be accepted:</p>

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

    <div>
    {% for obj in queryset %}
    <input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}" />
    {% endfor %}
    <input type="hidden" name="action" value="admin_action" />
    <input type="hidden" name="post" value="yes" />
    <input type="submit" value="{% trans "Yes, I'm sure" %}" />
    </div>
</form>
{% endblock %}

这篇关于使用Django管理员操作与中间页面的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆