Django ValueError : could not convert string to float

标签 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'

这里指定:https://docs.djangoproject.com/en/1.10/ref/settings/#decimal-separator

即使将 L10N 设置为 False,它也无法识别(尽管语言代码应该已经将小数点分隔符设置为逗号)

Django 仍然无法将逗号识别为小数分隔符

实际错误:

ValueError: could not convert string to 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()

发送的请求只是一个 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

模型字段没有:

>>> model_field.to_python('123,123')
ValidationError: [u"'123,123' value must be a float."]

模型字段没有记录为支持本地化,我在 source 中看不到任何内容建议应该支持。

obj = model(**data.get('fields')) 行表明您根本没有使用表单,您只是在使用 JSON 数据源并直接对其进行夯实进入模型。所以,我认为对您来说更好的选择是预处理 JSON 数据,因为 Django 似乎不支持您正在寻找的内容。

您可能想使用 sanitize_separators辅助函数,自 that's what the forms.fields.FloatField uses清理数据。演示:

>>> from django.utils.formats import sanitize_separators
>>> sanitize_separators('123,123')
'123.123'

关于Django ValueError : could not convert string to float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42864905/

相关文章:

Django 模型更改未反射(reflect)在 Postgres Docker 容器中

python - 如何将数据传递给 django 中的序列化器

python - Django REST 框架 : HTML render Generic APIView

python - Django 模板变量中的变量

python - Django聚合函数问题(Count = -number-)

Django - 自定义过滤器来检查文件是否存在

python - 用Django进行复杂查询(来自各位小伙伴的帖子)

python - 如何在 Django 中刷新对象的值?

python-2.7 - Django : Can't access model attributes