加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Django ValueError:无法将字符串转换为float

发布时间:2020-12-20 11:58:39 所属栏目:Python 来源:网络整理
导读:即使我把这行放在我的settings.py中: LANGUAGE_CODE = 'pt-br'TIME_ZONE = 'America/Sao_Paulo'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = TrueDECIMAL_SEPARATOR = ','DATE_INPUT_FORMATS = ['%d/%m/%Y']DATE_FORMAT = r'd/m/Y' 如此处所述:https://docs.dj
即使我把这行放在我的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'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读