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.DateTimeFieldto_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