Django Forms - Как использовать параметр префикса
Скажем, у меня есть такая форма:
class GeneralForm(forms.Form):
field1 = forms.IntegerField(required=False)
field2 = forms. IntegerField(required=False)
И я хочу 9X_html-head показывать его дважды на странице в одном 9X_html5 теге формы каждый раз с другим префиксом, например:
rest of page ...
rest of page ...
Когда 9X_webpage пользователь отправляет это, как мне вернуть 9X_html5 отправленную форму в две отдельные формы 9X_form для проверки и повторно отобразить ее?
This was the only documentation Я 9X_form нашел, и это отстойно.
Ответ #1
Ответ на вопрос: Django Forms - Как использовать параметр префикса
Вы обрабатываете каждую форму как обычно, обеспечивая 9X_divs создание экземпляров с теми же префиксами, что 9X_python и те, которые использовались для первоначального 9X_pythonic создания формы.
Вот немного неудобный пример 9X_python-interpreter использования предоставленной вами формы, поскольку 9X_divs я не знаю, каков точный вариант использования:
def some_view(request):
if request.method == 'POST':
form1 = GeneralForm(request.POST, prefix='form1')
form2 = GeneralForm(request.POST, prefix='form2')
if all([form1.is_valid(), form2.is_valid()]):
pass # Do stuff with the forms
else:
form1 = GeneralForm(prefix='form1')
form2 = GeneralForm(prefix='form2')
return render_to_response('some_template.html', {
'form1': form1,
'form2': form2,
})
Вот 9X_pythonista пример реального кода, демонстрирующего 9X_python обработку форм с использованием префикса:
http://collingrady.wordpress.com/2008/02/18/editing-multiple-objects-in-django-with-newforms/
Ответ #2
Ответ на вопрос: Django Forms - Как использовать параметр префикса
Более того, я думаю, что formsets - это именно то, что 9X_python вам нужно.
class GeneralForm(forms.Form):
field1 = forms.IntegerField(required=False)
field2 = forms. IntegerField(required=False)
from django.forms.formsets import formset_factory
# GeneralSet is a formset with 2 occurrences of GeneralForm
# ( as a formset allows the user to add new items, this enforces
# 2 fixed items, no less, no more )
GeneralSet = formset_factory(GeneralForm, extra=2, max_num=2)
# example view
def someview(request):
general_set = GeneralSet(request.POST)
if general_set.is_valid():
for form in general_set.forms:
# do something with data
return render_to_response("template.html", {'form': general_set}, RequestContext(request))
Вы даже можете автоматически сгенерировать 9X_pythonic набор форм из модели с помощью modelformset_factory, которые 9X_div используются автоматическим администратором 9X_divs django. FormSet обрабатывает даже больше, чем 9X_html-form простые формы, такие как добавление, удаление 9X_python-interpreter и сортировка элементов.
-
4
-
4
-
1
-
4
-
3
-
7
-
6
-
3
-
1
-
6
-
5
-
10
-
7
-
4
-
4
-
9
-
4
-
2
-
7
-
3
-
2
-
3
-
5
-
5
-
3
-
2
-
5
-
4
-
2
-
3
-
6
-
7
-
4
-
3
-
1
-
2
-
3
-
3
-
2
-
2
-
4
-
3
-
1
-
1
-
3
-
1
-
2
-
2
-
2
-
3