Выходящие за пределы диапазона плавающие значения не совместимы с JSON: nan, Django Rest Framework with Json Serialization Exception
Я работаю с 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')
Сериализация здесь - черный ящик, я не могу найти, где это исправить.
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 Metha:
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
