DRF TimeZoneField: не сериализуемая ошибка JSON
У меня есть модель django:
from django.db import models
from timezone_field import TimeZoneField
class Client(models.Model):
time_zone = TimeZoneField(choices_display='WITH_GMT_OFFSET')
А APIView для этой модели:
class ClientAPIView(APIView):
def get(self, request: Request, pk: int, format=None) -> Response:
client = get_object_or_404(Client, pk=pk)
client_serializer = ClientListSerializer(client)
return Response(client_serializer.data)
Я получаю ошибку при GET-запросе: TypeError: Object of type ZoneInfo is not JSON serializable
Код сериализатора:
class ClientListSerializer(serializers.ModelSerializer):
class Meta:
model = Client
fields = ('id', 'time_zone')
Как исправить код модели, сериализатора или представления (не знаю, что именно) так, чтобы вместо ZoneInfo была просто строка
Django 4.0+
Django 4.0 делает zoneinfo
реализацией по умолчанию. Поддержка pytz
теперь устарела и будет удалена в Django 5.0.
from zoneinfo import available_timezones
from rest_framework import serializers
class ClientSerializer(serializers.ModelSerializer):
time_zone = serializers.ChoiceField(choices=available_timezones())
class Meta:
model = Client
fields = ['id', 'time_zone', ]