drf - 发送响应时从 serializers.DateTimeField 中删除毫秒
drf - remove miliseconds from serializers.DateTimeField when sending response
我必须编写一个 returns 日期时间格式如下的序列化程序:
2012-01-01T13:00:00+00:00 (utc_with_timezone)
2020-01-01T09:00:00(必须是本地时间,没有时区信息)
class SomeResponse(serializers.Serializer):
modified = serializers.DateTimeField() # AutoLastModifiedField(_('modified'))
local_time = serializers.DateTimeField()
但修改字段的响应包含毫秒:2022-01-01T18:14:05.378897+05:00
local_time 字段的响应包含时区信息和我必须把它转换成当地时间
如何在不更改整个项目设置的情况下操作输出格式?
我通过覆盖 serializers.DateTimeField
的 to_representation
解决了这个问题:
class SomeResponse(serializers.Serializer):
modified = TimeZoneWithUTCField()
local_time = TimeZoneWithUTCField()
class TimeZoneWithUTCField(serializers.DateTimeField):
def to_representation(self, value):
if not value:
return None
value = value.strftime("%Y-%m-%dT%H:%M:%S%z")
if value.endswith('+0000'):
value = value[:-5] + '+00:00'
return value
我必须编写一个 returns 日期时间格式如下的序列化程序:
2012-01-01T13:00:00+00:00 (utc_with_timezone)
2020-01-01T09:00:00(必须是本地时间,没有时区信息)
class SomeResponse(serializers.Serializer):
modified = serializers.DateTimeField() # AutoLastModifiedField(_('modified'))
local_time = serializers.DateTimeField()
但修改字段的响应包含毫秒:2022-01-01T18:14:05.378897+05:00
local_time 字段的响应包含时区信息和我必须把它转换成当地时间
如何在不更改整个项目设置的情况下操作输出格式?
我通过覆盖 serializers.DateTimeField
的 to_representation
解决了这个问题:
class SomeResponse(serializers.Serializer):
modified = TimeZoneWithUTCField()
local_time = TimeZoneWithUTCField()
class TimeZoneWithUTCField(serializers.DateTimeField):
def to_representation(self, value):
if not value:
return None
value = value.strftime("%Y-%m-%dT%H:%M:%S%z")
if value.endswith('+0000'):
value = value[:-5] + '+00:00'
return value