drf按自定义字段排序返回数据

drf按自定义字段排序返回数据

在serializer.py中

首先自定义字段

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['id', 'title', 'price', 'publish', 'priority']

    # 新增字段(按该字段排序)
    priority = serializers.SerializerMethodField()

    def get_priority(self, obj):
        return 6 - int(obj.id)

在views.py中

class BookAPIView(APIView):
    def get(self, request):
        book_list = Book.objects.all()
        # 获取添加新字段后的序列化结果
        ser = BookSerializer(instance=book_list, many=True)
        # 把结果按照priority字段排序,reverse默认是False,是升序,True是降序
        order_by_data = sorted(ser.data, key=lambda x:x['priority'], reverse=False)
        return Response(order_by_data)

image

就实现按照自定义字段进行排序辣

当然,sorted方法还有其他参数,自行百度

排序可以删除该字段

class BookAPIView(APIView):
    def get(self, request):
        book_list = Book.objects.all()
        ser = BookSerializer(instance=book_list, many=True)
        order_by_data = sorted(ser.data, key=lambda x:x['priority'])
        for i in order_by_data:
            i.pop('priority')
        return Response(order_by_data)

image

posted @ 2022-04-21 23:22  zong涵  阅读(451)  评论(0)    收藏  举报