Я пытаюсь построить фильтр динамически на основе переданных параметров запроса.Код ниже.Поскольку фильтр может оказаться пустым, и в этом случае все объекты должны быть возвращены, это очень уродливо.
Есть ли способ сделать это чисто?Может быть, если есть Q по умолчанию, что означает «не ничего»?
def get(self, request, *args, **kwargs):
q = None
for field, value in request.GET.items():
if field not in Project._meta.fields:
continue
if q is None:
q = Q(**{'{}'.format(field): value})
else:
q &= Q(**{'{}'.format(field): value})
if q is None:
projects = get_objects_for_user(request.user, ['api.view_project', 'api.edit_project', 'api.owner_project'], any_perm=True)
else:
projects = get_objects_for_user(request.user, ['api.view_project', 'api.edit_project', 'api.owner_project'], any_perm=True).filter(q)
ser = ProjectSerializer(projects, many=True)
return Response(ser.data, status=status.HTTP_200_OK)