我在一页上使用两种形式(有我的理由)。它们不是模型形式。我试图通过使用前缀来验证它们。我在这里找到它:Proper way to handle multiple forms on one page in Django
但是,当我尝试获取cleaned_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']-没有任何帮助。

最佳答案

将cleaned_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

09-25 16:41