Django中带前缀表单的键错误
我在一个页面上使用了两个表单(我有我的理由)。这两个表单不是模型表单。我想通过使用前缀来验证它们。我在这里找到了相关信息:在Django中处理一个页面上的多个表单的正确方法。但是当我尝试获取清理后的数据时,遇到了键错误。
add_form = AbsenceTypeForm(request.POST, prefix = 'atype')
if add_form.is_valid():
absence_type = AbsenceType(
client = client_instance,
name = add_form.cleaned_data['type_name'],
gainful = add_form.cleaned_data['gainful'],
)
absence_type.save()
我在处理 type_name 时得到了 KeyError。我尝试添加 cleaned_data['atype-type_name']
,但没有任何帮助。
2 个回答
0
可能是你在提交的表单中把 type_name
留空了;cleaned_data
只会包含那些不为空的表单字段的内容。
2
你有没有想过把清理过的数据输出到屏幕上或者保存到文件里,这样可以检查一下它获取的键是什么?调试工具也应该能在局部变量中显示这个字典。我猜可能是前缀丢失或者拼写错误,或者是表单字段的名字不对。
顺便说一下,我同意使用 .get() 方法更安全(虽然看起来表单验证应该已经由 is_valid() 处理了,但你可能将来会决定把某个字段改为非必填,这样的话这段代码就会出错),所以:
name = add_form.cleaned_data.get('type_name',None),
gainful = add_form.cleaned_data.get('gainful',None),
if name and gainful:
pass
#rest of the code