如何将Django表单输入转换为python数据?

2024-10-01 07:41:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小部件,允许用户输入模型字段的数据。表单中的数据不能直接转换成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是正确的方法。它有一个从输入名称到输入值的字典。在


Tags: theto数据代码用户from模型表单
2条回答

Form子类中的cleanclean_<field>方法对此负责。以下是关于验证(和清洁)的文档:http://docs.djangoproject.com/en/1.2/ref/forms/validation/

{django}的来源:

Given a dictionary of data and this widget's name, returns the value of this widget. Returns None if it's not provided.

实际上还不清楚这个函数是用来做什么的。它的目的是根据已发布数据的整个字典返回该小部件的值;也就是说,它查看该数据,在给定的小部件实例中计算出属于它的数据并返回该值。在

我通过使用一个小心放置的raise异常崩溃我自己的自定义小部件来检查这一点。在

File "/usr/lib/python2.7/site-packages/django/forms/forms.py" in is_valid
  121.         return self.is_bound and not bool(self.errors)
File "/usr/lib/python2.7/site-packages/django/forms/forms.py" in _get_errors
  112.             self.full_clean()
File "/usr/lib/python2.7/site-packages/django/forms/forms.py" in full_clean
  267.         self._clean_fields()
File "/usr/lib/python2.7/site-packages/django/forms/forms.py" in _clean_fields
  278.             value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))

是否要在此处验证?我确实使用了一个multiwidget子类,但这不一定是最好的方法。我的方法从字典中重新构造日期,并尝试从中创建一个python日期对象。如果成功,它将其转换为字符串并返回有效的字符串;如果不成功,则返回None,这将使DateField()类型的数据库验证失败,这正是我想要的结果。在

你的widget是否希望这样做取决于你在做什么。我不相信这是最优雅的解决方案,所以我要打开我自己的问题。。。在

参考文献:

相关问题 更多 >