Формы Django: как отобразить начальную пустую форму? - PullRequest
0 голосов
/ 22 января 2010

У меня есть эта функция просмотра:

def search(request):
    if request.method == 'GET':
        form = SearchForm(request.GET)
        if form.is_valid():
            last_name = form.cleaned_data['last_name']
            first_name = form.cleaned_data['first_name']
            lawyers = Lawyer.objects.all()
            [ other if statements ]
            ....
    else:
        form = SearchForm()
        return render_to_response('search.html', {'form': form})

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

def search(request):
    if request.method == 'GET':
        form = SearchForm(request.GET)
        if form.is_valid():
            last_name = form.cleaned_data['last_name']
            first_name = form.cleaned_data['first_name']
            lawyers = Lawyer.objects.all()
            [ other if statements ]
            ....
        form = SearchForm()
        return render_to_response('search.html', {'form': form})
    else:
        form = SearchForm()
        return render_to_response('search.html', {'form': form})

Можете ли вы помочь, почему первый if никогда не бывает ложным? Спасибо.

Вся функция просмотра здесь

Ответы [ 2 ]

2 голосов
/ 22 января 2010

Каждый обычный HTTP-запрос (например, когда вы переходите к http://stackoverflow.com) - это запрос GET. Как правило, рекомендуется использовать POST в качестве метода ваших форм, когда они изменяют некоторые данные.

Вы должны прочитать: Когда вы используете POST и когда вы используете GET?

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

Когда вы публикуете форму с method=GET, вы фактически не меняете метод по сравнению с первоначальным запросом: это был method=GET тоже.

Вы можете либо использовать method=POST в своей форме, и ваш оператор if проверит это, либо вы можете проверить наличие обязательных полей, first_name, last_name или обоих, как того требует ваша форма.

if 'first_name' in request.GET or 'last_name' in request.GET:
    form = SearchForm(request.GET)
else:
    form = SearchForm()

Возможно, вы захотите абстрагировать это в саму форму, изменив метод __init__, но это не обязательно.

...