- 缓解数据库查询压力(重写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