Позиционный аргумент для подкласса forms.Form
сообщает Django, что вы намереваетесь обрабатывать форму, а не просто отображать пустую форму / форму по умолчанию.Ваш if request.method == 'GET'
не делает того различия, которое вы хотите, потому что обычные старые веб-запросы, набирая URL в веб-браузере или нажимая на ссылку, также являются запросами GET
, поэтому request.method
равно GET
в любом случае.
Вам нужен какой-то дифференцирующий механизм, чтобы вы могли различить отображение формы и процесс формы.
Идеи:
Если ваша обработка выполняется с помощью.AJAX, вы можете использовать if request.is_ajax()
в качестве условного выражения.
В качестве альтернативы вы можете включить токен GET
, который означает, что запрос обрабатывается.Согласно этому примеру, сначала вам нужно что-то в вашей форме:
<input type="hidden" name="action" value="process_form" />
А затем вы можете посмотреть на это значение в своем представлении:
if 'action' in request.GET and request.GET['action'] == 'process_form':
form = myForm(request.GET)
if form.is_valid():
# form processing code
else:
form = myForm()
Я также дам вамстандартная, стандартная точка зрения, что обычно предпочтительнее не использовать GET для обработки формы, если вы можете помочь ей (именно потому, что вы сталкиваетесь с подобными трудностями, поскольку вы используете аномальный шаблон), но если у вас есть случай использования, когда вы действительнонужно, тогда вам действительно нужно.Вы знаете свои потребности лучше, чем я.: -)