def list(self, request): # pylint: disable=too-many-locals
query_objects = self.class_name.objects # pylint: disable=no-member
queryset = query_objects.all().order_by(
self.order_param_name
)
if request.GET.get('search'):
queryset = []
param = self.request.query_params.get('search', None)
if param is not None:
fields_class = self.class_name
fields = fields_class._meta.fields # pylint: disable=no-member
fields_char = [
f for f in fields
if isinstance(f, CharField)]
fields = [
f for f in fields
if not isinstance(f, CharField)]
queries_char = [
Q(**{f.name+'__contains': param})
for f in fields_char]
try:
param_num = int(param)
except ValueError:
param_num = 0
queries = [Q(**{f.name: param_num}) for f in fields]
print(fields)
_queries = Q()
for query in queries:
_queries = _queries | query
for query in queries_char:
_queries = _queries | query
objects = self.class_name.objects # pylint: disable=no-member
queryset = objects.filter(_queries)
if request.GET.get('all'):
self.pagination_class = None
serializer = self.serializer_class( # pylint: disable=not-callable
queryset,
many=True)
response = Response(serializer.data)
else:
paginator = pagination.PageNumberPagination()
queryset = paginator.paginate_queryset(
queryset=queryset,
request=request
)
serializer = self.serializer_class( # pylint: disable=not-callable
queryset,
many=True)
response = paginator.get_paginated_response(serializer.data)
return response
评论列表
文章目录