如何使用表单对象更改提交的表单数据的值并重新显示它?

时间:2010-07-08 20:16:41

标签: django django-forms

基本上我想清理用户在表单中提交的一些数据,如果出现错误,我会重新显示它。如果我从表单对象中提取数据,这很容易做到。我可以覆盖clean()方法并操纵数据。我也可以在第一次显示时设置.initial值。但是,我找不到一种方法来处理将在出错时重新显示的表单数据。例如,假设用户提交的电话号码为“123 456 test test 7890”,我希望能够删除非字母数字字符(这很容易),并在表单字段中只显示数字“1234567890”

1 个答案:

答案 0 :(得分:22)

如果数据来自请求(如果您使用视图就是这种情况),form.data字典将是QueryDict,它应该是不可变的。值得庆幸的是,你可以通过先复制它来改变它:

self.data = self.data.copy()
self.data['phone_number'] = 1234567890

如果您直接更改不是来自视图请求的表单实例,您可以直接更改form.data字典(这是一个简单的字典对象),如下所示:

# Don't need to copy `data` first
self.data['phone_numer'] = 123456789