drf修改序列化字段

  • 缓解数据库查询压力(重写ListModelMixin的list方法)
    def list(self, request, *args, **kwargs):

        query_params = {"tar_time__lte": datetime.datetime.now()}
        if "tar_start_time" not in request.query_params:
            query_params['tar_time__gte'] = datetime.datetime.now().date() - datetime.timedelta(16)
        # 获取查询集
        queryset = self.filter_queryset(self.get_queryset().filter(**query_params))
        
        # 分页
        page = self.paginate_queryset(queryset.values('id'))
        # To select id instead of *
        ids = [i['id'] for i in page]
        # 以id查询
        page = RobotsLog.objects.filter(id__in=ids).order_by('-tar_time')
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)
  • 通过序列化器修改字段
class TestSerializer(serializers.ModelSerializer):
    file_path = serializers.SerializerMethodField()  # file_path默认来自get_file_path函数,当然serializers.SerializerMethodField()也可以指定函数

    @staticmethod
    def get_file_path(obj):
        """对模型类字段进行修改"""
        pass
发布了61 篇原创文章 · 获赞 11 · 访问量 6461

猜你喜欢

转载自blog.csdn.net/weixin_41449756/article/details/103770807
今日推荐