在没有 Javascript 和验证的情况下使用 POST 向表单集添加附加表单

Add an additional form to a formset using POST without Javascript and validation

我想使用 Django 表单集,但使用纯服务器呈现且不需要 Javascript 向其添加其他表单。用户只需单击页面上的一个按钮,页面就会重新加载表单集中的附加表单。应保留所有用户输入!视图中的相关部分是:

if request.POST.get('add_form') == "true":
  cp = request.POST.copy()
  cp['form-TOTAL_FORMS'] = int(cp['form-TOTAL_FORMS']) + 1
  fs = MyFormSet(cp)

问题在于,当 MyFormSet(cp) 呈现表单表示时,它会向其添加验证错误(例如“此字段为必填项”)。这是丑陋的,不可接受的。我怎样才能在没有错误的情况下呈现它(它们应该只在提交整个表单时出现)?

MyFormSet(initial=...) 似乎不是一个选项,因为它也必须在 UpdateView 中工作(文档非常清楚 initial 仅适用于额外的形式)以及 POST数据不能直接作为初始值。

我非常感谢任何提示,因为我花了几个小时却一无所获(这似乎是一个常见的功能,因为 Django 的其余部分是如此 Javascript 不可知)。

感觉像是 hack,但它有效(在初始化表单集之后):

fs._errors = {}
for form in fs:
  form._errors = {}

这会在呈现给 HTML 时删除字段中的所有错误。背景是当 _errors 设置为 None(默认值)时,表单在呈现时会自行验证。当它被设置为空字典时,表单将不再验证自身,只是“认为”其中没有错误。因此不会呈现任何错误消息。