2010-01-20 3 views
1

대량 전자 메일 연락처에 Django 관리자 작업을 작성하고 있습니다.Django의 admin 인터페이스에 POST 양식 제공

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">을 사용할 필요가 없다. 그러나 불행히도 모델의 admin 인터페이스없이 뷰 핸들러에 사용자 입력을 POST 할 수 없다. 버튼을 사용하면 원하지 않는 관리 인터페이스가 나타납니다.) email_form에서받은 입력을 처리 할 수 ​​있도록 양식 POST를 자체적으로 POST (<form action="" method="post">) 할 수있는 방법이 있습니까? 불필요한 URL과 불필요한 기능을 가진 입력을 처리하려고하면 코드가 작동하도록 URL을 하드 코딩하므로 방해가됩니다.

답변

1

django의 inbuilt url 태그를 사용하면 링크를 하드 코딩하지 않아도됩니다.

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

기회는 당신이 cron 작업에 의해보다는 게시물에 오프 트리거 될 대량 메일 발송을 설정하는 더 나을 것입니다 ... 참조하십시오. 답 밖으로

확인 나는 또한 당신이보기 업데이트에 email_send 기능을 트리거 주장한다면 아마도

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

보면 여기 Django scheduled jobs

을 게시