33.ModelSerializer详解

ModelSerializer特点
  • 根据Model模型的定义,自动生成字段
  • 自动生成相应的验证器
  • 实现create和update
  • 自动默认将关系字段映射成PrimaryKeyRelatedField主键关系字段
ModelSerializer指定序列化字段三种方法
class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        # 1.序列化指定字段
        fields = ('id', 'name',)
        # 2.序列化全部所有的字段
        fields = '__all__'
        # 3. 序列化除了user以外的所有字段
        exclude = ('user',)
        
'''
三种方法只能使用一种
第二种和第三种方法有暴露数据的风险
例如数据库有password字段,第二种会直接序列化出来,第三种,如果没有排除的话,也会序列化出来
'''
depth
depth用于指定序列化字段时嵌套的深度
如下其中的category分类返回了对应的两个分类id
不查看category数据的话
我们并不知道对应id的name是什么
class TextSerializer(serializers.ModelSerializer):
    auth = AuthSerializer()

    class Meta:
        model = Text
        fields = ('id', 'title', 'content', 'auth', 'category', 'created')
        # 修改Text序列化器,指定depth深度为1
        depth = 1
可以看出指定深度后,返回的内容 除了id还有对应的name
read_only_field
'''
如果我们使用Serializer类写序列化的时候,有字段希望只读不被修改的话,会通过read_only字段设定,例如
name = serializer.Charfield(read_only=True) 

在ModelSerializer中,如果要设定的只读字段的话使用read_only_field批量指定元组即可
不需要像serializer中一个一个字段设置指定
'''

class Meta:
    model = Text
    fields = ('id', 'title', 'content', 'auth', 'category', 'created')
    depth = 1
    read_only_field = ('created','auth',)
extra_kwargs额外的关键字参数
class Meta:
    model = Text
    fields = ('id', 'title', 'content', 'auth', 'category', 'created')
    depth = 1
    read_only_field = ('created','auth',)
    # 使用extra_kwargs指定字典
    extra_kwargs = {
        # key就是字段名,value就是要设置的参数
        'title':{'write_only':True,'require':True},
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值