rest Serialzier 改变字段格式

前言

我们用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然后自己想要的值就可以啦!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值