我有一个小部件,允许用户输入模型字段的数据。表单中的数据不能直接转换成Python—它需要一些强制操作。我把这个代码放在哪里?小部件是否负责将其post
数据转换为python值?场地本身?在
我原以为value_from_datadict()
可能是正确的,但现在看来,这又起到了不同的作用。在
(如果有什么不同的话,我使用的是管理界面中的表单。)
更新@AndiDog:我不相信to_python
是我想要的。Django来源:
135 def to_python(self, value):
136 """
137 Converts the input value into the expected Python data type, raising
138 django.core.exceptions.ValidationError if the data can't be converted.
139 Returns the converted value. Subclasses should override this.
140 """
141 return value
您是说调用这个函数时,value
是来自表单的POST
数据?我放入了一个print语句,提交表单时value
是{
更新2:实际上,看起来value_from_datadict
是正确的方法。它有一个从输入名称到输入值的字典。在
Form子类中的
clean
和clean_<field>
方法对此负责。以下是关于验证(和清洁)的文档:http://docs.djangoproject.com/en/1.2/ref/forms/validation/{django}的来源:
实际上还不清楚这个函数是用来做什么的。它的目的是根据已发布数据的整个字典返回该小部件的值;也就是说,它查看该数据,在给定的小部件实例中计算出属于它的数据并返回该值。在
我通过使用一个小心放置的
raise
异常崩溃我自己的自定义小部件来检查这一点。在是否要在此处验证?我确实使用了一个multiwidget子类,但这不一定是最好的方法。我的方法从字典中重新构造日期,并尝试从中创建一个python日期对象。如果成功,它将其转换为字符串并返回有效的字符串;如果不成功,则返回None,这将使
DateField()
类型的数据库验证失败,这正是我想要的结果。在你的widget是否希望这样做取决于你在做什么。我不相信这是最优雅的解决方案,所以我要打开我自己的问题。。。在
参考文献:
相关问题 更多 >
编程相关推荐