4

私はDjangoの新規ユーザーです。次のコードを使用して、フォームを作成します

class GetMachine(forms.Form):
    Machine_Name = forms.CharField(max_length=20) 
    Number_of_lines = forms.IntegerField(max_value=10)

class GetLine(forms.Form):
    Line_name = forms.CharField(max_length=20)

def install(request):
    if request.method == 'POST':
        form = GetMachine(request.POST) 
        if form.is_valid(): # All validation rules pass
            # Process the data in form.cleaned_data
            form = GetLine()
            return render_to_response('install.html', { 'form': form, })
    else:
        form = GetMachine() # An unbound form

    return render_to_response('install.html', { 'form': form, })    

「Number_of_lines」を使用してn個の「Line_Name」フォームフィールドを作成するように、上記のコードを変更するにはどうすればよいですか。

たとえば、Number_of_linesの値が2の場合、もう一度、両方の行の名前を次のように入力するようにユーザーに依頼します。

Line-1の名前:

Line-2の名前:

4

1 に答える 1

6

POSTデータからnumber_of_linesを取得したら、その番号を「extra」パラメーターとしてフォームセットファクトリに渡すことができます。

from django.forms.formsets import formset_factory
...
        form = GetMachine(request.POST) 
        if form.is_valid(): # All validation rules pass
            number_of_lines = form.cleaned_data['Number_of_lines']

            GetLineFormSet = formset_factory(GetLine, extra=number_of_lines)
            formset = GetLineFormset()
            form = GetLine()
...

ヒント: max_numパラメーターを使用して、行数を適切な制限に保つこともできます。

GetLineFormSet = formset_factory(GetLine, extra=number_of_lines, max_num=10)
于 2013-01-18T23:07:08.517 に答える