zoukankan      html  css  js  c++  java
  • 模型类序列化器-ModelSerializer

    模型类序列化器

    1 简介

    drf提供了模型类序列化器:Model Serializer。作用就是简化对应django模型类的序列化器的定义。

    ModelsSerializer与常规的Serializer相同,但提供了:

    1. 基于模型类自动生成一系列字段
    2. 基于模型类自动为Serializer生成Validators,比如字段唯一的校验器
    3. 包含默认的create()和update()实现。

    2 定义

    比如我们创建一个DepartmentSerializer2

    from rest_framework import serializers
    class DepartmentSerializer2(serializers.ModelSerializer):
        class Meta:
            model=Department  # 指明参照的是哪个模型类
            fields = '__all__'  # 包含模型类的所有字段
            fields = ('name','id')  # 只序列化指定的字段
            exclude = ('name',)  # 跟fields不能都写,写谁就排除谁
            read_only_fields = ('price',)  # 仅用于序列化输出,在反序列化时不会进行校验和修改。
            extra_kwargs = {
                # name=serializers.CharField(max_length=12,min_length=4)
                'price':{'write_only':True}
            }
    

    3 用法

    '''
    source 的三种用法:
        1. 可以改字段名字  xxx=serializers.CharField(source='name')
        2. 可以跨表  publish=serializers.CharField(source='publish.email')
        3. 可以执行方法 pub_date = serializers.CharField(source='test'),test是Book表模型的方法
    '''
    SerializerMethodField()使用,主要用于显示返回多个值
        1. 需要配套放大,get_字段名,返回值就是要显示的东西
        authors = serializer.SerializerMethodField()
        
        def get_authors(self, instance):
            authors=instance.authors.all().values('name','age')
            return authors
            
    modelsserializer里写局部钩子和全局钩子是和serializer一毛一样的。
    
  • 相关阅读:
    WCF 、Web API 、 WCF REST 和 Web Service 的区别
    BusyIndicator using MVVM 忙碌状态指示器的的实现
    复制文件夹的方法 .net
    SQL/LINQ/Lamda
    CSLA验证规则总结
    C++中GB2312字符串和UTF-8之间的转换
    如何用VC编写供PB调用的DLL
    【转】lucene4.3.0 配置与调试
    cygwin主要命令
    【转】eclipse中window->preference选项中没有tomcat的解决方法
  • 原文地址:https://www.cnblogs.com/liqianxin/p/13269969.html
Copyright © 2011-2022 走看看