在我的 Django 1.7.11 应用程序中,我通过HTTP获取使用西班牙语语言环境格式化的数据。因此,在我看来,我得到一个代表西班牙语语言环境中十进制数字的unicode字符串:
spanish_number = request.GET.get('some_post_value', 0)
# spanish_number may be u'12,542' now, for example. And may come via POST. This is not important. Just the value itself is important: it contains commas as decimal separator.
我希望将它存储在DecimalField类型的Django Model&#fs字段中:
class MyModel(models.Model):
my_number = models.DecimalField(max_digits=10, decimal_places=3, null=True, blank=True)
在我的settings.py中,我有
USE_L10N=True
USE_I18N=True
如果我尝试类似
的话m = MyModel()
m.my_number = spanish_number # This is, u'12,542'
m.save()
由于
而失败并出现ValidationErroru'12,542' must be a decimal number
处理这个问题的正确方法是什么?我的意思是,事实上我的应用程序将以这种方式接收数字(和日期...)(西班牙语)区域)
P.S。:我知道Django有一个DecimalField表格,有一个localize = True选项,但我直接处理模型而不是表格。
答案 0 :(得分:1)
您正在查看表单DecimalField
的正确轨道。如果检查其来源,您会看到当设置为本地化时,它会通过formats.sanitize_separators
运行字符串。您可以直接调用它来转换为Decimal()
期望的格式:
import django.utils.formats
m.my_number = formats.sanitize_separators(spanish_number)