Получение данных из формы промежуточного программного обеспечения с помощью jQuery в Django - PullRequest
0 голосов
/ 29 апреля 2011

У меня есть промежуточное ПО, подобное этому:

class PostModelFormMiddleware(object):

def process_request(self, request):

    form = PostModelForm()
    request.post_form = form

Эта форма имеет поле для ввода капчи. То, что я хочу сделать в моем шаблоне - это каждый раз, когда кто-то нажимает. Отправьте обновленный вопрос с помощью Javascript на новый. Как мне получить это request.post_form и его данные в jQuery?

Спасибо!

РЕДАКТИРОВАТЬ: больше кода.

HTML:

   <form id="add_post">
...
        <input type="hidden" name="math_captcha_question" value="fbc9fcdffbf2b2723ab36e9f341372214daf1be936202d2035">
    6 - 5 = 
...
    </form>

Я хотел бы изменить значение «math_captch_question», а также отображаемый текст. Оба они изначально отображаются с использованием тега шаблона {{request.post_form.math_captcha_question}}

JQuery:

 $("form#add_post").submit(function() {
 //Validations and stuff
            var data = {category:category, body:body, nickname:nickname, math_captcha_question:math_captcha_question, math_captcha_field:math_captcha_field};
            var args = {type:"POST", url:"add_post/", data:data, complete:function(res, status) {
                //Process response
                //This is where I would like to set new values for math_captcha_question

            } };

            $.ajax(args);
        }


        return false;

    })

/ add_post / view:

def add_post(request):
    if request.method == 'POST':

        if form.is_valid():
           #do stuff
           return HttpResponse("success")

        else:
            return HttpResponseServerError("fail")

1 Ответ

1 голос
/ 29 апреля 2011

Сначала вы должны вывести форму в шаблон, присвоить ей id или другой идентификатор, а затем получить доступ к ней через jQuery.

<form id="myform" ...>
    {{request.post_form}}
</form>

Редактировать: Я предполагаю, что у вас есть 'django.core.context_processors.request' в настройке TEMPLATE_CONTEXT_PROCESSORS.

Обновление (согласно комментариям ниже):

Ваше add_post представление должно возвращать что-то в ответе jQuery.ajax может иметь дело. Если он просто возвращает "success", в ответе будет только простой текст. Чтобы упростить процесс, вы должны вернуть новое значение math_captcha_question:

def add_post(request):
    if request.method == 'POST':
       #fill some data in the form
       form = PostModelForm(request.POST)
       if request.post_form.is_valid()
            math_captcha_question = form.cleaned_data["math_captcha_question"]
            return HttpResponse(math_captcha_question)
       else:
            return HttpResponse("error")

В обратном вызове в jquery вы можете работать со значениями, которые вы получаете, и соответственно давать удобный для пользователя ответ. У вас на complete обратный вызов:

function(res, status) {
    if (res!="error") {
        $("form#add_post #id_math_captcha_question").attr("value", res);
    } else {
        //show some error to your user
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...