2016-01-16 2 views
2

У меня есть модель, которая имеет поле часового пояса, используя django-timezone-field. Он сохраняет объект pytz в поле. То, что я хотел бы получить обратно в ответ, - это зона объекта instance.timezone_field.zone.Сериализация Часовой пояс Объект

С этим полем я использую ReadOnlyModelViewSet, а при выдаче запроса GET я получаю сообщение об ошибке <DstTzInfo 'US/Arizona' LMT-1 day, 16:32:00 STD> is not JSON serializable.

Имеет смысл, почему я получаю ошибку, объект не является сериализуемым JSON. Но как бы я сериализовал его для использования подполя зоны?

Чтобы показать структуру поля объекта, в оболочке можно получить зону с помощью:

obj = MyModel.objects.get(id=1) 
obj.timezone.zone 
"US/Pacific" 

ответ

2

Я в конечном итоге сделать custom serializer field и используя поле зоны на объекте временной зоны.

class TimezoneField(Field): 
    "Take the timezone object and make it JSON serializable" 
    def to_representation(self, obj): 
     return obj.zone 

    def to_internal_value(self, data): 
     return data 

class AppSettingsSerializer(ModelSerializer): 

    timezone = TimezoneField() 

    class Meta: 
     model = UserAppSettings 
Смежные вопросы