当前位置:  开发笔记 > 编程语言 > 正文

Django表单预览 - 如何使用'cleaning_data'

如何解决《Django表单预览-如何使用'cleaning_data'》经验,为你挑选了1个好方法。



1> Joe Holloway..:

我之前从未尝试过使用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'],
    ...
)

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有