2010-01-20 3 views
1

Я пишу действие администратора Django для массовых контактов электронной почты. Действие определяется следующим образом:POSTING формы в интерфейсе администратора 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 пользовательские входы обработчику вида без интерфейса администратора для перезагрузки модели в его месте (когда я попал в submit с, появляется интерфейс администрирования, который я не хочу.)

Есть ли способ, которым я мог бы сделать форму POST для себя (<form action="" method="post">), чтобы я мог обрабатывать входы, полученные в email_form? Попытка обработки ввода с помощью посторонних URL-адресов и ненужных функций беспокоит меня, поскольку я жестко кодирует URL-адреса для работы с кодом.

ответ

1

Вы можете использовать встроенный ярлык URL-адреса django, чтобы избежать ссылок на жесткую кодировку. см ...

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

Скорее всего, вы бы лучше создание массовой почтовой программы, чтобы быть провоцируется на хрон, а не на посту.

Заканчивать ответ я отправил здесь Django scheduled jobs

Кроме того, если вы настаиваете на запуск функции email_send на обновление вида возможно смотреть на

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