python - 在 Django 中使用 formset_factory

标签 python django django-forms

我是 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,我想再次要求用户输入两行的名称作为

1 号线名称:

2号线名称:

最佳答案

从 POST 数据中获取 number_of_lines 后,您可以将该数字作为“额外”参数传递给表单集工厂。

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)

关于python - 在 Django 中使用 formset_factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14399435/

相关文章:

Django 使用 CheckboxSelectMultiple 小部件设置 <ul> 类而不是 &lt;input&gt;

python - 使用 sklearn 对状态进行一种热门编码

django - 从 django 上的关系注释列字段

django-livereload-server 不工作 404 未找到

Django 模型形式 : What is save(commit=False) used for?

Django:模型中的验证顺序

python - 打开上传的 CSV 文件时出现类型错误

Python异步: Unable to run parallel asynio couroutine

python - 在 Python 中使用 getattr 调用函数

python - 如何在 tkinter 中平滑椭圆周围的边缘?