Django 表单集合
Django 表单集合(Form Sets)是一种允许用户在单个页面上提交多个表单数据的功能。表单集合通常用于需要用户提交多个类似数据的情况,例如添加多个商品、多个地址等。
使用 Django 表单集合,需要定义一个基础表单类(BaseForm),然后使用这个基础表单类创建表单集合(FormSet)。
以下是一个简单的示例,展示如何使用 Django 表单集合来创建一个添加多个网站链接的页面:
from django import forms from django.forms import formset_factory # 定义基础表单类 class LinkForm(forms.Form): name = forms.CharField(max_length=100) url = forms.URLField() # 定义表单集合类 LinkFormSet = formset_factory(LinkForm, extra=3) # 定义视图函数 def add_links(request): if request.method == 'POST': formset = LinkFormSet(request.POST) if formset.is_valid(): for form in formset: name = form.cleaned_data.get('name') url = form.cleaned_data.get('url') # 将数据保存到数据库或其他地方 return redirect('link_list') else: formset = LinkFormSet() return render(request, 'add_links.html', {'formset': formset})
在上面的示例中,我们使用 LinkForm
类定义了一个基础表单类,它有两个字段:name
和 url
。然后,我们使用 formset_factory
函数创建了一个名为 LinkFormSet
的表单集合类,该表单集合包含了 LinkForm
类的 3 个实例。
在视图函数 add_links
中,我们通过判断请求的方法来决定是显示空的表单集合,还是提交用户提交的表单数据。如果请求方法是 POST,我们先对表单集合进行验证,如果验证通过,就循环处理每个表单实例的数据,将其保存到数据库或其他地方,最后跳转到链接列表页面。如果请求方法是 GET,我们只需要创建一个空的表单集合即可,并在渲染页面时将其传递给模板。
在模板中,我们可以使用以下方式来渲染表单集合:
<form method="POST"> {% csrf_token %} {{ formset.management_form }} {% for form in formset %} {{ form.as_p }} {% endfor %} <button type="submit">提交</button> </form>
在上面的模板中,我们利用 Django 表单集合提供的 management_form
属性,生成了一个包含表单集合信息的隐藏 input,用于在表单提交时传递必要的额外信息。然后,我们遍历表单集合中的每个表单实例,调用 as_p
方法将其转换成 HTML 的 <p>
元素,并将其渲染到页面上。
当用户提交表单时, Django 会根据提交的信息自动创建一个合适的表单集合实例,我们只需要对其进行验证,并处理其中每个表单实例的数据即可。这让我们在构建需要添加多个类似数据的页面时,能够更加方便和高效地处理用户提交的数据。
相关文章