2011-07-14 21 views
14

Tôi đã thêm hành động quản trị send_EMAIL thông qua admin.py.I muốn khi quản trị viên sử dụng hành động send_EMAIL cho người dùng được chọn sẽ hiển thị trang trung gian với tất cả người dùng được chọn và yêu cầu xác nhận.In trường hợp của tôi nó yêu cầu xác nhận nhưng khi tôi bấm vào nút "gửi Email" không có gì xảy ra và tôi đã trở lại view_list view mà không có hành động send_EMAIL được gọi.Vấn đề bằng cách sử dụng tác vụ quản trị Django với các trang trung gian

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.', '[email protected]',[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 %} 

Xin lỗi vì tiếng anh xấu .Plz giúp

+0

'queryset' đến từ đâu? Mục nhập urlconf cho mục này là gì? –

+0

Tôi tham khảo http://www.jpichon.net/blog/2010/08/django-admin-actions-and-intermediate-pages/) để triển khai các trang trung gian> Tôi thực sự không biết nhiều về Django vì vậy tôi đã đăng câu hỏi này. – Anshul

Trả lời

23

Tôi tìm thấy một cách dễ dàng để làm điều đó. Nó làm việc cho tôi ... Tôi hy vọng nó sẽ giúp:

Những gì bạn cần làm là "chuyển" các mục đã chọn đến trang xác nhận và đưa chúng vào biểu mẫu cũng như bao gồm <input type="hidden" name="action" value="admin_action" /> để quản trị viên django biết rằng nó vẫn nên gọi admin action. post chỉ là để biết có nên xử lý bộ truy vấn hoặc hiển thị trang xác nhận hay không.

# 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 %} 
+0

Công cụ {% cho obj trong queryset%} này hoạt động. Nhưng với tôi đó là Dark Magic. Bất cứ ai biết TẠI SAO nó hoạt động? – theannouncer

+0

Nó thêm một đầu vào biểu mẫu ẩn liệt kê tất cả các đối tượng bạn dự định thay đổi. –

+0

Dark Magic là lý do tại sao nó hoạt động cho trang đầu tiên mà không có nó. –

Các vấn đề liên quan