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)

转载于:https://www.cnblogs.com/jianhaozhou/p/10104441.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值