rest Serialzier 改变字段格式

来源:互联网 发布:知豆二手车zhidouzz 编辑:程序博客网 时间:2024/06/05 06:34

前言

我们用Serializer返回Json数据的时候,我们会发现有的字段不是我们想要的效果,
比如一个datetime类型的字段,会默认返回为:
"update_time": "2017-07-08T00:41:07.201525Z"

而我们想要的效果是:
"update_time": "2017-07-08 01:15"

那么该如何实现呢?我们一起来看看。

实践

我们先来看看models都有哪些类:

class User(models.Model):    username = models.CharField(max_length=20, null=False, unique=True)    password = models.CharField(max_length=20, null=False)    name = models.CharField(max_length=10, null=False, unique=True)  # 名称class Blog(models.Model):    title = models.CharField(max_length=50, null=False)    body = models.TextField()    owner = models.ForeignKey(User)  # 博客的创建者    create_time = models.DateTimeField("创建日期", auto_now_add=True)    update_time = models.DateTimeField("更新日期",  auto_now=True)    is_deleted = models.BooleanField(default=False)    def __str__(self):        return self.title

这就是一个简单的博客的数据库模型了~~

那么来看看serializer:

class BlogSerializer(serializers.ModelSerializer):    owner = serializers.ReadOnlyField(source='owner.name')    class Meta:        model = Blog        fields = ('id', 'title', 'body', 'owner','create_time','update_time')

也非常的简单,那么我们应该怎么改变create_timeupdate_time的格式呢?

  1. 自定义一个字段序列化类:

    class FormatTimeField(serializers.BaseSerializer):   def to_representation(self, value):       return value.now().strftime('%Y-%m-%d %H:%M')

    这里我们是只读的,所以,只需要重写to_representation这个方法,其中的value是传递进来的字段,在这个例子中就是datetime。

    然后我们调用datetime.now().strftime('%Y-%m-%d %H:%M')就可以得到指定格式的时间了!!!

  2. 使用自定义的序列化类:

    class BlogSerializer(serializers.ModelSerializer):   owner = serializers.ReadOnlyField(source='owner.name')   create_time = FormatTimeField(read_only=True)   update_time = FormatTimeField(read_only=True)   class Meta:       model = Blog       fields = ('id', 'title', 'body', 'owner','create_time','update_time')
  3. 浏览器得到的json数据就是如下效果啦:

           {           "id": 4,           "title": "ICELEE的博客",           "body": "哎哟  不错哦",           "owner": "李斌2",           "create_time": "2017-07-08 01:23",           "update_time": "2017-07-08 01:23"       }

后记

所以,改变某个字段还是很简单的,我们只需要继承serializers.BaseSerializer类,然后通过传入的value然后自己想要的值就可以啦!!!

原创粉丝点击