Проверка формы Django с помощью GET - PullRequest
1 голос
/ 22 февраля 2012

У меня есть форма, которая позволяет пользователям выбирать несколько параметров, чтобы разрешить граненый запрос данных. Поскольку здесь нет ввода данных, я хочу, чтобы форма отправлялась в GET, и у меня есть другое представление с другим шаблоном, в котором отображаются результаты.

Я хочу, чтобы форма проверялась как обычно, так что, если обязательное поле не заполнено, отображаются соответствующие ошибки. На данный момент мой процесс выглядит так (упрощенно):

мой поиск:

def search(request):
    ...
    context['form'] = GraphForm()
    ...
    return render(request, 'search.html', context)

мои результаты просмотра:

def results(request):
    if 'submit' in request.GET:
        # process GET variables as query
    ...
    return render(request, 'results.html', context)

my search.html шаблон:

<form action="{% url results %}" method="get">{% csrf_token %}
{% for field in form %}
<div class="field_wrapper">
    {{ field.errors }}
    {{ field.label_tag }} {{ field }}
</div>
{% endfor %}
<input type="submit" name="submit" value="Query"  />
</form>

Учитывая, что форма отправляется на другой URL с отдельным кодом представления, каков наилучший способ проверки (выделения ошибок) и обеспечения наличия моих данных GET?

Любая помощь высоко ценится.

Ответы [ 3 ]

2 голосов
/ 19 мая 2015

Это может быть немного поздно, но я думаю, что при поддержании сходства с рабочим процессом 'POST' будет работать следующее:

Вместо двух разных представлений для поиска и отображения результатов, просто используйте одно представление.Затем можно следовать нормальному кодовому пути , описанному для почтовых форм.Вместо использования request.method == 'POST' для обнаружения отправки формы мы используем 'submit' in request.GET.Если для отправки формы используется javascript, убедитесь, что в данные GET включено «submit», или используйте скрытое поле для обнаружения отправки формы.

views.py

def search(request):
    context_dict = {}
    if 'submit' in request.GET:
        form = GraphForm(request.GET)
        if form.is_valid():
            #do search and add results to context
            #If you don't want to use a single view, 
            # you would redirect to results view here.
            results = get_results(**form.cleaned_date)
            context_dict['results'] = results
    else:
        form = GraphForm()
    context_dict['form'] = form
    return render(request, 'search.html', context_dict)

search.html

<form action="{% url 'search' %}" method="get">
    {{form}}
    <input type="submit" name="submit" value="Query"  />
</form>
{% if results %}
    {% include 'results.html' %}
{% endif %}
1 голос
/ 22 февраля 2012

Вы должны быть в состоянии передать request.GET точно так же как request.POST в форму.Форма просто принимает словарь data.Неважно, откуда это.Вы уже пробовали это?

0 голосов
/ 22 февраля 2012

Используйте JavaScript / jQuery для проверки формы. Все, что вам нужно сделать, это добавить идентификатор к form и в соответствующем Javascript сделать что-то вроде

document.getElementById("#form").onsubmit = checkForm();

или используя jQuery

$("#form").submit(checkForm);

где checkForm() возвращает true при успешной проверке, и false в противном случае. (Обратите внимание, что если вы не вернете false, отправка формы продолжится как обычно.)

Какие поля вы проверяете / проверяете, также можно изменить с помощью шаблонов Django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...