📜  内联表单集加 (1)

📅  最后修改于: 2023-12-03 15:36:48.851000             🧑  作者: Mango

内联表单集加

内联表单集加(Inline formset)是 Django 中一个非常有用的功能,允许我们在同一个表单中为一个相关联的外键集合提供多个表单。通常,我们使用内联表单集加来处理用户向关联模型添加、编辑或删除许多实例(例如,一个订单模型与其中的多个订单条目相关联)的情况。

实现方式

Django 内置了一个基本内联表单集加,我们可以通过一些简单的步骤来使用它。

  1. 导入 inlineformset_factory
from django.forms import inlineformset_factory
  1. 定义相关联的模型(如上面提到的订单和订单条目):
from myapp.models import Order, OrderItem
  1. 使用 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()
总结

通过内联表单集加,我们可以轻松地向表单添加一个副表单。这个副表单可以方便地适应特定场景,比如表单保存后可以根据用户的需求修改副表单。同时,我们还可以使用一些额外的参数来对内联表单集加进行自定义设置。