У меня есть веб-отчет, который использует форму Django (новые формы) для полей, которые управляют запросом, используемым для создания отчета (дата начала, дата окончания, ...). У меня проблема в том, что страница должна работать с использованием начальных значений формы (без привязки), но я не могу получить доступ к полю cleaned_data, пока я не вызову is_valid (). Но is_valid () всегда терпит неудачу на несвязанных формах.
Похоже, что формы Django были разработаны с использованием сценария редактирования данных таким образом, что несвязанная форма на самом деле не полезна ни для чего, кроме отображения HTML.
Например, если у меня есть:
if request.method == 'GET':
form = MyForm()
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
is_valid () потерпит неудачу, если это GET (так как он не связан), и если я это сделаю:
if request.method == 'GET':
form = MyForm()
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
первый вызов do_query вызывает исключения в form.cleaned_data, который не является допустимым полем, потому что is_valid () не был вызван. Кажется, я должен сделать что-то вроде:
if request.method == 'GET':
form = MyForm()
do_query(form['start_date'].field.initial, form['end_date'].field.initial)
else:
form = MyForm(request.method.POST)
if form.is_valid():
do_query(form.cleaned_data['start_date'], form.cleaned_data['end_date'])
то есть, нет единого интерфейса для извлечения значений формы между связанной и несвязанной формами.
Кто-нибудь видит более чистый способ сделать это?