Moj*_*imi 3 django django-models django-1.10
即使我把这行放在我的settings.py中:
LANGUAGE_CODE = 'pt-br'
TIME_ZONE = 'America/Sao_Paulo'
USE_I18N = True
USE_L10N = True
USE_TZ = True
DECIMAL_SEPARATOR = ','
DATE_INPUT_FORMATS = ['%d/%m/%Y']
DATE_FORMAT = r'd/m/Y'
Run Code Online (Sandbox Code Playgroud)
如此处所述:https://docs.djangoproject.com/en/1.10/ref/settings/#decimal-separator
即使将L10N设置为False,它也无法识别(尽管语言代码应该已将小数点分隔符设置为逗号)
Django仍然不会将逗号识别为小数点分隔符
实际错误:
ValueError:无法将字符串转换为float:'123,123'
该字段只是一个默认的FloatField,我没有使用表单.
什么可能导致它无法识别逗号?
这是views.py代码:
def new_object(request):
data = json.loads(request.body.decode("utf-8"))
model_name = data.get('model')
model = apps.get_model(app_label='cadastroimoveis', model_name=model_name)
obj = model(**data.get('fields'))
obj.save()
Run Code Online (Sandbox Code Playgroud)
发送的请求只是一个JSON,字段为字符串
编辑:我刚检查,甚至没有DATE_INPUT_FORMATS它工作,它仍然期望默认值
问题是您似乎将模型字段与表单字段混淆.表单字段提供本地化,它的工作原理:
>>> from django.db.models.fields import FloatField
>>> from django.forms.fields import FloatField as FloatFormField
>>> model_field = FloatField()
>>> form_field = model_field.formfield(localize=True)
>>> isinstance(form_field, FloatFormField)
True
>>> form_field.to_python('123,123')
123.123
Run Code Online (Sandbox Code Playgroud)
模型字段不:
>>> model_field.to_python('123,123')
ValidationError: [u"'123,123' value must be a float."]
Run Code Online (Sandbox Code Playgroud)
模型字段没有记录为支持本地化,我在其中看不出任何source暗示它应该被支持的内容.
该行obj = model(**data.get('fields'))显示您根本不使用表单,您只是使用JSON数据源并将其直接撞击到模型中.因此,我认为更好的选择是预处理JSON数据,因为Django似乎不支持您正在寻找的内容.
您可能希望使用sanitize_separators辅助函数,因为这是forms.fields.FloatField清理数据的用途.演示:
>>> from django.utils.formats import sanitize_separators
>>> sanitize_separators('123,123')
'123.123'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2050 次 |
| 最近记录: |