• DRF的序列化组件的使用


    DRF的序列化组件的使用

    1.导入drf的序列化组件

    from rest_framework import serializers
    

    2.写一个类继承它(类名随意)(可以指定返回的数据条数)

    class BookSerializer(Serializer):
        name=serializers.CharField()
        //source可以指定返回的key
        book_price = serializers.CharField(source='price')
    

    3.若要序列化的表有关联多个表

    ​ 1)方式一:

    ​ fields = 可以是列表表示只要列表中的字段,fields='all'表示全部

    ​ exclude=['publish','authors'],表示去掉指定字段

    ​ fields和exclude不能连用

    class AuthorsDRF(serializers.Serializer):
        author_id = serializers.IntegerField(source='id')
        author_name = serializers.CharField(source='name')
        author_sex = serializers.CharField(source='sex')
        addr = serializers.CharField()
    
    
    class BooksDRF(serializers.ModelSerializer):
        book_name = serializers.CharField(source='name')
    
        class Meta:
            model = Book
            fields = ['book_name', 'price', 'author']
    	#想要得到author表的详细信息
        author = serializers.SerializerMethodField()
    
        def get_author(self, book):
            aut = book.author.all()
            aut_msg = AuthorsDRF(aut, many=True)
            return aut_msg.data
    

    ​ 2)方式二:

    ​ depth=1表示深度是一,表示可以得到深度是一的表的详细信息

    class BooksDRF(serializers.ModelSerializer):
        book_name = serializers.CharField(source='name')
    
        class Meta:
            model = Book
            fields = '__all__'
            depth=1
    
    

    ​4.在视图函数中使用

    ​ 1.many=Ture表示传入多条many=False表示传入一条

    ​ 2.注意在序列化完成以后必须调用方法.data才能得序列化后的数据

    class Books(APIView):
        def get(self, request):
            books = models.Book.objects.all()
            books_res = BooksDRFtest(books, many=True)
            authors = models.Author.objects.all()
            authors_res = AuthorsDRF(instance=authors,many=True)
            response = {'status':200,'msg':'查询成功!','books':books_res.data,'authors':authors_res.data}
            return JsonResponse(response, safe=False)
    
        def put(self, request, id):
            models.Book.objects.filter(id=id).update(name=request.data.get('name'))
            book = models.Book.objects.filter(id=id).first()
            book_res = BooksDRF(book, many=False)
            return JsonResponse(book_res.data, safe=False)
    
        def delete(self, request, id):
            models.Book.objects.filter(id=id).delete()
            return JsonResponse(' ', safe=False)
    
        def post(self,request):
            response = {'status':201,'msg':None}
            book_name = request.data.get('book_name')
            book_price= request.data.get('book_price')
            pub_time = request.data.get('pub_time')
            publish_id = request.data.get('publish_id')
            author_id = request.data.get('author_id')
            book = models.Book.objects.create(name=book_name,price=book_price,pub_time=pub_time,publish_id=publish_id)
            book.author.add(*author_id)
            book_res = BooksDRF(book,many=False)
            response['obj'] = book_res.data
            return JsonResponse(response,safe=False)
    
    
  • 相关阅读:
    连续型随机变量量函数的期望
    一个压缩级数的概率分布列
    采用积分近似级数
    关于超过几何分布
    最长游程问题
    基于递归方式解的两道题
    概率统计几道题目
    关于dede后台登陆后一片空白以及去除版权
    mac下安装xampp、及其之上的组件安装
    启用phpstorm代码提示功能
  • 原文地址:https://www.cnblogs.com/jianhaozhou/p/10104441.html
Copyright © 2020-2023  润新知