Выходящие за пределы диапазона плавающие значения не совместимы с 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')

Сериализация здесь - черный ящик, я не могу найти, где это исправить.

screenshot of error

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
Вернуться на верх