【问题标题】:Out of range float values are not JSON compliant: nan, Django Rest Framework with Json Serialization Exception超出范围的浮点值不符合 JSON:nan,带有 Json 序列化异常的 Django Rest Framework
【发布时间】:2022-11-10 10:17:21
【问题描述】:

我与rest_framework 合作实现django API。我数据库中的表 Order 有 nan 字段,Nan 生成错误Out of range float values are not JSON compliant: nan。 如何确保将 Nan 序列化为 JSON 有效。

#serializers.py

from rest_framework import serializers
from api.models import Order
    
class OrderSerializer(serializers.ModelSerializer):
   class Meta:
       model = Order
       fields = ('id', 'status', 'description')

这里的序列化是一个黑匣子,我找不到解决这个问题的地方。

【问题讨论】:

  • 哪个领域是花车?你能分享你的模型代码吗?
  • @Daniel 我有 18 个字段,我只是优化了代码,但我相信很多字段都面临同样的问题

标签: python json django django-rest-framework django-serializer


【解决方案1】:

JSON 不支持 NaN 值

您可以使用以下命令将 NaN 替换为 None 来更正模型数据

from django.db.models import Q
import math
import decimal

MyModel.objects.filter(Q(field_name=math.nan) | Q(field_name=decimal.Decimal("NaN"))).update(field_name=None)

或者在序列化程序中添加一个验证值不是 NaN 的方法,例如,它是

#serializers.py
from rest_framework import serializers
from api.models import Order
import math
    
class OrderSerializer(serializers.ModelSerializer):
     order_description = serializers.SerializerMethodField()
     class Target:
         model = Order
         fields = ('id', 'status', 'order_description')

     def get_order_description(self, obj):
         if obj.description is not None and not math.isnan(obj.description):
             return obj.description
         return None

【讨论】:

    猜你喜欢
    • 2020-10-30
    • 2016-12-13
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多