Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将django表单输入转换为python数据?_Python_Django_Forms - Fatal编程技术网

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

如何将django表单输入转换为python数据?,python,django,forms,Python,Django,Forms,我有一个小部件,允许用户输入模型字段的数据。表单中的数据不能直接转换为Python—它需要一些强制。我应该把代码放在哪里?小部件是否负责将其post数据转换为python值?场本身 我原以为来自_datadict()的value\u可能是正确的,但现在看来这有不同的用途 (我正在使用管理界面中的表单,如果它有任何区别的话。) 更新@AndiDog:我不相信我想要的是python的。从Django来源: 135 def to_python(self, value): 136

我有一个小部件,允许用户输入模型字段的数据。表单中的数据不能直接转换为Python—它需要一些强制。我应该把代码放在哪里?小部件是否负责将其
post
数据转换为python值?场本身

我原以为来自_datadict()的
value\u可能是正确的,但现在看来这有不同的用途

(我正在使用管理界面中的表单,如果它有任何区别的话。)

更新@AndiDog:我不相信我想要的是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
None
,即使输入有数据


更新2:事实上,看起来从数据目录中获取的
value\u才是正确的选择。它有一个从输入的名称到它们的值的字典。

表单子类中的
clean
clean
方法对此负责。以下是关于验证(和清理)的文档:

引用django源代码:

给定数据字典和此小部件的名称,返回值 这个小部件的名称。如果未提供,则返回None

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

我用一个小心放置的
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()
类型的验证失败,这正是我想要实现的

您的小部件是否希望这样做取决于您正在做什么。我不相信这是最优雅的解决方案,所以我想提出我自己的问题

参考文献:


我已经在你的-implement
to_python
中告诉过你。是我自己还是标题和问题问了两个完全不同的问题?@AndiDog也许我误解了什么。(OP更新。)很抱歉,问题有点重复。如果您在
to_python
中得到value==None,您可能忘记绑定表单(例如
form=MyForm(request.POST)
)。我刚刚试过,
to_python
从我的POST参数中获取值。你的代码中一定有什么东西。