Django在带有前缀的表单上的键错误

时间:2011-06-25 22:34:10

标签: python django forms cleaned-data

我在一个页面上使用两个表单(我有我的理由)。它们不是模型形式。我试图通过使用前缀来验证它们。我在这里找到了它:Proper way to handle multiple forms on one page in Django 但是当我尝试获取cleaning_data时,我得到了关键错误。 以下是我的一些代码:

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 :(得分:1)

将cleaning_data转移到某个地方,屏幕或文件怎么样 - 只是检查它获得的密钥?调试器还应该在本地显示字典。我猜它是丢失/拼写错误的前缀或表单字段名称。

顺便说一下,我同意使用.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

答案 1 :(得分:0)

也许您在发布的表单中留空type_name; cleaned_data仅包含非空表单字段的键。