序列化类高级用法之source、SerializerMethodField和断言assert
  XWVJhDBKEkMp 2023年11月02日 31 0

序列化类高级用法之source

使用source,字段参数,可以修改序列化字段名字

原本序列化器中字段名,必须和表中的字段名一样,不一样会报错

我们可以通过source字段来改变序列化器中的字段名,使得前端在展示的时候也修改一下字段名!!

image

image

source也可以做跨表查询,通过外键字段,表名点外键出去的字段名字

class BookSerializer(serializers.Serializer):
	publish=serializers.CharField(source='publish.email')
# 等价于book.publish.email 查到当前书对象的文键出版社对象然后拿到该出版社对象的邮箱

source指定的可以是字段,也可以是方法,用于重命名

image

小坑:不能够指定它原本的名字
image

序列化类高级用法之定制序列化字段的俩种方式

方式一:在【序列化类】中写SerializerMethodField

必须配合一个方法(get_字段名,需要传一个字段名接受一个参数),方法返回什么,这个字段就是什么

class BookSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=8, min_length=3)
    price = serializers.IntegerField(max_value=300, min_value=10)
    # publish = serializers.CharField(max_length=8, min_length=3)

    # publish要序列化成{name:北京出版社,city:北京,email:2@qq.com}
    # 方式一:SerializerMethodField必须配合一个方法(get_字段名,需要传一个字段名接受一个参数),方法返回什么,这个字段就是什么
    publish = serializers.SerializerMethodField()

    def get_publish(self, obj):
        # obj 就是当前序列化的对象
        return {'name': obj.publish.name, 'city': obj.publish.city, 'email': obj.publish.email}  # 基于对象的跨表查询

    # 练习一
    author = serializers.SerializerMethodField()
    def get_author(self, obj):
        res_list = []
        for author in obj.authors.all():
            res_list.append({'id': author.id, 'name': author.name, 'age': author.age})
        return res_list

image

assert断言

# 框架的源码中,大量使用断言

# assert :断言,作用的判断,断定一个变量必须是xx,如果不是就报错

# 你的土鳖写法
# name = 'lqz1'
# if not name == 'lqz':
#     raise Exception('name不等于lqz')
#
# print('程序执行完了')

# assert的断言写法
name = 'lqz1'
assert name == 'lqz', 'name不等于lqz'
print('程序执行完了')

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Fnpj8K6xSCR   2024年05月17日   107   0   0 Python
  xKQN3Agd2ZMK   2024年05月17日   75   0   0 Python
  fwjWaDlWXE4h   2024年05月17日   38   0   0 Python
  YpHJ7ITmccOD   2024年05月17日   40   0   0 Python
XWVJhDBKEkMp