Как обрабатывать динамические поля во время выполнения в Django - PullRequest
0 голосов
/ 06 марта 2012

Я разрабатываю динамическую форму, основанную на выборе пользователя. Это двухэтапный процесс: сначала пользователь выбирает из списка переключателей и в зависимости от этого выбора пользователю будут представлены соответствующие поля формы. Я знаю, как это сделать, используя тип, но я использую 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 })

1 Ответ

0 голосов
/ 06 марта 2012

Обдумайте вашу форму.Загляните внутрь «form.fields» или «form.cleaned_data».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...