gpt4 book ai didi

使用modelformset_factory中的初始数据触发Django验证错误

转载 作者:行者123 更新时间:2023-12-01 05:15:41 30 4
gpt4 key购买 nike

我目前正在运行 Django 1.4。

当我创建一个模型表单集并为额外的表单提供初始值时,Django 会针对它运行验证并发现其他必填字段为空,从而引发验证错误。

我的代码看起来像这样:

QueryFormset = modelformset_factory(Query, extra=1, 
can_delete=True, form=QueryForm
)

if request.method == "POST":
qformset = QueryFormset(request.POST)
if qformset.is_valid():
qformset.save()
else:
# This is where we go when the formset is saved without
# any values inserted into the extra form
else:
qformset = QueryFormset(
queryset=Query.objects.filter(user=request.user),
initial=[{'user': request.user}]
)

如果我只是单击保存而不对表单(现有表单或额外表单)的值进行任何更改,则表单集将被标记为无效,因为额外表单在用户字段中有内容,但缺少其他必填字段。

我如何让 Django 让它过去?它应该扔掉额外的表格,因为没有任何改变。

最佳答案

我并不是说这是最好的解决方案,但我能够通过修改表单的“is_bound”来解决这个问题。 ' 属性。这是一个内部标志,指示表单是否有值得验证的内容(据我所知)。

initial_data = [{...},]
if request.POST:
formset = ContactFormSet(request.POST, initial=initial_data)

valid = True
for form in formset:
if not form.has_changed():
# we don't want to complain about an unmodified form.
form.is_bound = False
if not form.is_valid():
valid = False

if valid:
for form in formset:
if form.has_changed():
# do stuff

else:
formset = ContactFormSet(initial=initial_data)

...

将此解决方法集成到表单/表单集本身而不是 View 中肯定会更好,但我并不经常需要这种行为,所以对我来说已经足够了。

关于使用modelformset_factory中的初始数据触发Django验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20890101/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com