问题描述
我想使用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无关)。
解决方法
感觉像是黑客,但这可以(在初始化表单集之后):
fs._errors = {}
for form in fs:
form._errors = {}
这会将所有呈现为HTML的错误从字段中删除。背景是将_errors
设置为None
(默认设置)时,表单在呈现时会进行自我验证。当将其设置为空dict时,表单将不再对其自身进行验证,而只是“认为”其中没有错误。因此,不会显示任何错误消息。