我之前从未尝试过使用ModelForm进行的操作,但您可以使用**运算符将您的cleaning_data字典扩展为您的注册构造函数所需的关键字参数:
registration = Registration (**cleaned_data)
模型类的构造函数接受Django的Model元类转换为结果对象上的实例级属性的关键字参数.**运算符是一种调用约定,它告诉Python将字典扩展为那些关键字参数.
换一种说法...
你目前正在做的是等于这个:
registration = Registration ({'key':'value', ...})
这不是你想要的,因为构造函数需要关键字参数而不是包含关键字参数的字典.
你想要做的就是这个
registration = Registration (key='value', ...)
这类似于:
registration = Registration (**{'key':'value', ...})
同样,我从来没有尝试过,但只要你没有对你的表单做任何花哨的事情,比如为你的注册构造函数不期望添加新的属性,它似乎会起作用.在这种情况下,您可能必须在执行此操作之前修改cleaning_data字典中的项目.
但是,通过浏览表单预览实用程序,您似乎正在失去ModelForms中固有的某些功能.也许您应该将您的用例带到Django邮件列表中,看看是否有一个潜在的增强功能可以使这个API更好地使用ModelForms.
编辑
除了我上面描述的内容之外,您总是可以"手动"从您的cleaning_data字典中提取字段并将它们传递到您的注册构造函数中,但需要注意的是,在添加新代码时必须记住更新此代码字段到您的模型.
registration = Registration ( x=cleaned_data['x'], y=cleaned_data['y'], z=cleaned_data['z'], ... )