POSTing формы в интерфейсе администратора Django - PullRequest
1 голос
/ 20 января 2010

Я пишу действия администратора 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','noreply@localboast'),['redacted@email.com'],
            )
            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-адреса для работы с кодом.

1 Ответ

1 голос
/ 20 января 2010

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

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

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

Ознакомьтесь с ответом, который я разместил здесь Запланированные задания Django

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

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

...