• 序列化组件


    一  Serialiaer

    1.重命名

    class BooksSerializer(serializers.Serializer):
        # 第一种序列化方式
        name = serializers.CharField()
        xxx = serializers.CharField(source='price')

    2.取出出版社名字

    • 方式一
      • 在模型表中重写__str__方法

    序列化组将

    class BooksSerializer(serializers.Serializer):
        publish = serializers.CharField()

    模型表

    class Publish(models.Model):
        nid = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        city = models.CharField(max_length=32)
        email = models.EmailField()
    
        def __str__(self):
            return self.name
    • 方式二
      • 用source,拿出出版社城市

    组件

    class BooksSerializer(serializers.Serializer):
        publish = serializers.CharField(source='publish.city')

    sourse不仅可以指定字段,还可以指定方法

    组件

    class BooksSerializer(serializers.Serializer):
        city = serializers.CharField(source='publish.test')

    模型表

    class Publish(models.Model):
        nid = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        city = models.CharField(max_length=32)
        email = models.EmailField()
    
        def test(self):
            return self.city

    3.SerializerMethodField,可以指定一个方法

    组将

    class BooksSerializer(serializers.Serializer):
        publish = serializers.SerializerMethodField()
    
        def get_publish(self, obj):
            # obj是当前book对象
            dic = {'name': obj.publish.email, 'email': obj.publish.name, 'addr': obj.publish.city}
            return dic

    方法内部可以继续用其他的序列化类

    from rest_framework import serializers
    
    class AuthorSerializer(serializers.Serializer):
        nid = serializers.CharField()
        name = serializers.CharField()
        age = serializers.CharField()
    
    
    class BooksSerializer(serializers.Serializer):
        authors = serializers.SerializerMethodField()
    
        def get_authors(self, book):
           author = book.authors.all()
           # 方法内部还可以继续用其他的序列化类
           auther_ser = AuthorSerializer(author,many=True)
           return auther_ser.data

    二  ModelSerialiaer

    from app01.models import Book
    
    class BooksSerializer(serializers.ModelSerializer):
        class Meta:
            # model=指定表
            model = Book
            # fields = '__all__'
            # 指定只取这两个字段
            # fields = ['nid', 'name']
            # fields,跟exclude不能连用
            # 指定深度,就是跨几个表(官方建议小于10,我给你的建议小于3)
            exclude = ['publish', 'authors']
            depth = 1
  • 相关阅读:
    20220820研讨会
    autodlpycharm 配置
    20220827研讨会
    HGNN实验
    RabbitMq 入门实例详解+实例代码
    springbootstarterjdbc、mysqlconnectorjava、mybatisspringbootstarter区别及说明
    Filter和Interceptor 使用场景和原理(一)
    自动生成代码如: model、service、mapper By mybaitplus
    mybaits两步生成代码+实例代码
    详细Dubbo 微服务+zookeeper分享,一看就懂(附实例代码)
  • 原文地址:https://www.cnblogs.com/zhaijihai/p/10103585.html
Copyright © 2020-2023  润新知