码迷,mamicode.com
首页 > 其他好文 > 详细

模型类序列化器-ModelSerializer

时间:2020-07-09 00:43:23      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:校验和   port   field   code   配套   art   作用   creat   字段名   

模型类序列化器

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一毛一样的。

模型类序列化器-ModelSerializer

标签:校验和   port   field   code   配套   art   作用   creat   字段名   

原文地址:https://www.cnblogs.com/liqianxin/p/13269969.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!