在Django的管理界面中发布表格

问题描述:

我正在写一个Django管理员操作来群发电子邮件联系人。该动作被定义如下:在Django的管理界面中发布表格

def email_selected(self,request,queryset): 
    rep_list = [] 
    for each in queryset: 

     reps = CorporatePerson.objects.filter(company_id = Company.objects.get(name=each.name)) 

     contact_reps = reps.filter(is_contact=True) 
     for rep in contact_reps: 
      rep_list.append(rep) 

    return email_form(request,queryset,rep_list) 

email_form存在作为视图和填充的模板,此代码:

def email_form(request,queryset,rep_list): 
    if request.method == 'POST': 
     form = EmailForm(request.POST) 
     if form.is_valid(): 
      cd = form.cleaned_data 
      send_mail(
       cd['subject'], 
       cd['message'], 
       cd.get('email','[email protected]'),['[email protected]'], 
      ) 
      return HttpResponseRedirect('thanks') 
     else: 
      form = EmailForm() 
     return render_to_response('corpware/admin/email-form.html',{'form':form,}) 

和存在于模板如下:

<body> 
    <form action="/process_mail/" method="post"> 
     <table> 
      {{ form.as_table }} 
     </table> 
     <input type = "submit" value = "Submit"> 
    </form> 
</body> 

/process_mail /被硬链接到urls.py中的另一个视图 - 这是一个问题。我真的很喜欢它,所以我不必使用<form action="/process_mail/" method="post">,但不幸的是,我似乎无法将用户输入发布到视图处理程序,而无需管理界面为该模型重新加载它的位置(当我点击提交按钮,出现管理界面,这是我不想要的。)

有没有一种方法可以使表单POST自身(<form action="" method="post">),以便我可以处理在email_form中接收到的输入?尝试处理带有无关URL和不需要的函数的输入会困扰我,因为我对URL进行了硬编码以处理代码。

您可以使用django的内置url标记来避免硬编码链接。看到...

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#url

有可能到头来你会更好建立一个邮件群发由cron作业,而不是在后期被触发了。

退房答案我张贴在这里 Django scheduled jobs

此外,如果你坚持触发视图更新的email_send功能也许看

http://docs.djangoproject.com/en/dev/topics/signals/