如何在序列化器中自定义模型字段

时间:2018-08-10 06:55:18

标签: python django django-rest-framework

我有一个带有DateTime类型字段的模型。我想显示此字段,例如 2018-05-04 12:05

我该怎么做?

我的模型:

class MyModel(models.Model):
    name = models.CharField(max_length = 100)
    ....
    created_at = models.DateTimeField()


class MySerializer(serializers.ModelSerialer):
    class Meta:
        model = MyModel
        fields = ('name', 'created_at')

但是它显示created_at,例如: 1990-12-31T23:59:60Z

2 个答案:

答案 0 :(得分:2)

DRF serializer's doc

  

format -代表输出格式的字符串。如果未指定,   该默认值与DATETIME_FORMAT设置键相同,   除非设置,否则将为 'iso-8601' 。设置为格式字符串   指示应将to_representation返回值强制转换为   字符串输出。格式字符串如下所述。设定这个值   到None表示Python datetime对象应由   to_representation。在这种情况下,日期时间编码将为   由渲染器确定。

您可以通过为串行化程序指定DateTimeField format 参数来实现。

class MySerializer(serializers.ModelSerializer):
    created_at = serializers.DateTimeField(format='%Y-%m-%d %H:%M')
    class Meta:
        model = MyModel
        fields = ('name', 'created_at')

答案 1 :(得分:1)

您可以定义格式。

created_at = serializers.DateTimeField(format="%Y-%m-%dT%H:%M:%S", required=False, read_only=True)

更改所需类型的格式。如果要更改所有日期时间,请在设置文件中进行更改。

REST_FRAMEWORK = {
'DATETIME_FORMAT': "%Y-%m-%dT%H:%M:%S.%fZ",

}