更改日期时间格式django休息框架

San*_*eep 4 model django-rest-framework

我想在django rest框架中更改日期时间格式

我已经实现了一个逻辑,但它并没有满足我的要求

模型

class User (models.Model):
    user_id = models.AutoField(primary_key=True)
    user_name = models.CharField(max_length=150)
    created_at = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)

setting.py文件我已经定义了日期时间格式

REST_FRAMEWORK = {

    'DATETIME_FORMAT': "%m/%d/%Y %H:%M:%S",
}
Run Code Online (Sandbox Code Playgroud)

询问

data = User.objects.filter(pk=51)
serializer = UserSerializer(data, many=True)
Run Code Online (Sandbox Code Playgroud)

序列化数据后的结果

 {
      "user_id": 41406,
      "user_name": "abc@gmail.com",
      "created_at": "09/26/2016 22:52:16",
 }
Run Code Online (Sandbox Code Playgroud)

现在,当我点击另一个模型时,日期时间格式也像这样"09/26/2016 22:52:16",但我不想在anthor模型中使用这种日期格式.

如果我们可以更改特定型号的日期时间格式并在序列化程序中调用它,请告诉我

Iva*_*kin 12

您可以to_representation在模型序列化器中覆盖需要不同日期输出的方法:

class UserSerializer(serializers.ModelSerializer):
    ...
    def to_representation(self, instance):
        representation = super(UserSerializer, self).to_representation(instance)
        representation['created_at'] = instance.created_at.strftime(<your format string>)
        return representation
Run Code Online (Sandbox Code Playgroud)

或者您可以编写自定义字段并使用它而不是默认字段.

class UserSerializer(serializers.ModelSerializer):
    created_at = serializers.DateTimeField(format='%Y')
    # add read_only=True to the field in case if date created automatically
    ...
Run Code Online (Sandbox Code Playgroud)