Я разрабатываю динамическую форму, основанную на выборе пользователя. Это двухэтапный процесс: сначала пользователь выбирает из списка переключателей и в зависимости от этого выбора пользователю будут представлены соответствующие поля формы. Я знаю, как это сделать, используя тип, но я использую 2 разные формы (1 для начального выбора и 1 для настраиваемых полей формы) и 2 разных представления.
У меня есть два вопроса:
1) правильно ли разделять эти 2 формы и есть ли мнения?
2) как только пользователь заполнил 2-ю (пользовательскую) форму, как я могу узнать во время выполнения, какие поля
были представлены ей для того, чтобы создать объект и сохранить его в БД?
class SelectionForm(forms.Form):
choice = forms.ModelChoiceField(queryset=Fruit.objects.filter(...)
widget=forms.RadioSelect,
initial='')
# views.py
def review(request):
if request.method == 'POST':
form = SelectionForm(request.POST)
if form.is_valid():
user_choice = form.cleaned_data['choice']
return HttpResponseRedirect('/new_order/%s' % (user_choice))
else:
form = SelectionForm()
return render_to_response( '/new_order.html', {'form': form} )
def order_fruit(request, user_choice):
if request.method == 'POST':
"""
make_order_form uses Python type to create a form
depending on user_choice
"""
form = make_order_form(request.POST, user_choice)
if form.is_valid():
# How to know which fields were presented to the user -
# in order to create the Order object with the right -
# arguments ????????????????????
return HttpResponseRedirect('/thanks/')
else:
form = make_order_form(request, user_choice)
return render_to_response('/second_step_order.html', { 'form':form })