📅  最后修改于: 2023-12-03 15:36:48.851000             🧑  作者: Mango
内联表单集加(Inline formset)是 Django 中一个非常有用的功能,允许我们在同一个表单中为一个相关联的外键集合提供多个表单。通常,我们使用内联表单集加来处理用户向关联模型添加、编辑或删除许多实例(例如,一个订单模型与其中的多个订单条目相关联)的情况。
Django 内置了一个基本内联表单集加,我们可以通过一些简单的步骤来使用它。
inlineformset_factory
:from django.forms import inlineformset_factory
from myapp.models import Order, OrderItem
inlineformset_factory
来创建一个内联表单集加:OrderItemFormset = inlineformset_factory(Order, OrderItem, fields=('product', 'quantity'))
有两种方法可以在视图函数中使用内联表单集加:在表单加载时,要么在表单保存后。下面分别进行介绍:
当我们加载包含内联表单集加的表单时,需要为表单集加提供一个实例。
order = Order.objects.get(pk=1)
form = OrderForm(instance=order)
formset = OrderItemFormset(instance=order)
然后你可以在模板中像这样渲染该表单集加:
{{ form.as_p }}
{{ formset.as_p }}
显示的将是一个表单和它的若干个条目(数量取决于与 Order 相关联的 OrderItems 的数量)。
如果需要在表单保存后修改内联表单集合,可以这样做:
order = Order.objects.get(pk=1)
form = OrderForm(request.POST, instance=order)
formset = OrderItemFormset(request.POST, instance=order)
if form.is_valid() and formset.is_valid():
form.save()
formset.save()
通过内联表单集加,我们可以轻松地向表单添加一个副表单。这个副表单可以方便地适应特定场景,比如表单保存后可以根据用户的需求修改副表单。同时,我们还可以使用一些额外的参数来对内联表单集加进行自定义设置。