我有一个模型表格;有一个字段cost
。我在该字段上使用jquery number
,当值超过999时,它会附加逗号。
例如
Changes 1234 to 1,234
当用户提交表单时;数据未经过验证。 我尝试捕获Clean方法,但self.cleaned_data中不存在此值。 我还尝试从self.data中提取该值并将其转换为1234 float并附加到self.cleaned_data并返回。但那也没有用。
请让我知道。
Cost: Enter a number.
我缺少什么?
答案 0 :(得分:1)
https://docs.djangoproject.com/en/1.7/topics/i18n/formatting/
首先,设置正确的区域设置:settings.USE_I18N,settings.USE_L10N,settings.LANGUAGE_CODE,settings.USE_THOUSAND_SEPARATOR
其次,将小部件设置为本地化:
class MyForm(forms.ModelForm):
...
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['cost'].localize = True
self.fields['cost'].widget.is_localized = True
如果您使用的是forms.Form
而不是modelform,那么您只需要将localize=True
参数传递给字段定义
修改:虽然记录了FormField(localize=True)
,因此记录了form.fileds['fieldname'].localize = True
,但未记录widget.is_localized
,我已直接from django code。所以潜在的行为可能会在下一个django版本中出现,所以首选的方式是使用FormField(localize=True)
答案 1 :(得分:0)
Python无法转换" 1,234"字符串浮动。
>>> float("1,234")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 1,234
>>>
您可以使用__init__
方法形式清理此数据:
class MyForm(forms.Form):
def __init__(self, data=None, *args, **kwargs)
if data and 'cost' in data:
data['cost'] = data['cost'].replace(',', '')
super(MyForm, self).__init__(data, *args, **kwargs)
答案 2 :(得分:0)
您可以像这样覆盖默认字段:
class MyForm(forms.ModelForm):
cost = forms.CharField()
def clean_cost(self):
data = self.cleaned_data['cost']
return float(data.replace(',', ''))
class Meta:
model = MyModel
field = {'cost', ...}
详细文档在此处:https://docs.djangoproject.com/en/1.7/topics/forms/modelforms/#overriding-the-default-fields