2

while returning custom response I having render error. I am using django 1.8 and DRF 2.4.8

view is

class UserList(generics.ListAPIView):
# queryset = User.objects.all()
serializer_class = UserSerializer

def get_queryset(self):
    is_staff = self.request.GET.get('is_staff', None)
    is_superuser = self.request.GET.get('is_superuser', None)
    is_admin = self.request.GET.get('is_admin', None)
    company = self.request.GET.get('company', None)
    userdetails = UserData(self.request.user).userdetails()
    print(userdetails.get('usertype'))
    query1 = query = Q()
    if is_staff:
        query1.add(Q(is_staff=is_staff), Q.AND)
    if is_superuser:
        query1.add(Q(is_superuser=is_superuser), Q.AND)
    if is_admin:
        query = Q(is_admin=is_admin)
    if company:
        query.add(Q(company__name=company), Q.AND)
    if userdetails.get('usertype') is 'superuser':
        if is_admin or company:
            profile_list = Profile.objects.filter(query).values_list('user_id', flat=True)
            user_list = User.objects.filter(id__in=profile_list)
            return user_list.filter(query1)
        else:
            return User.objects.filter(query1)
    elif userdetails.get('usertype') in ['staff', 'admin']:
        up = Profile.objects.get(user=self.request.user)
        profile_list = Profile.objects.filter(company=up.company)  # .values_list('user_id', flat=True)
        user_list = profile_list.filter(query).values_list('user_id', flat=True) if is_admin or company else \
            profile_list.values_list('user_id', flat=True)
        final_list = User.objects.filter(id__in=user_list)
        return final_list.filter(query1)
    else:
        return Response(data={"error": ["You don't have enough permission."]}, status=status.HTTP_400_BAD_REQUEST)

while returning response from last else part I am getting error? What is the solution? what is wrong in Response()?

Jorge Orpinel Pérez
  • 6,361
  • 1
  • 21
  • 38
108
  • 119
  • 2
  • 11

1 Answers1

4

get_queryset should return a QuerySet, not a Response. Yet you can still act as if it isn't valid by raising an validation exception:

from rest_framework.exceptions import ValidationError

def get_queryset(self):
    ...
    else:
        raise ValidationError({"error": ["You don't have enough permission."]})
daaawx
  • 3,273
  • 2
  • 17
  • 16
Linovia
  • 19,812
  • 4
  • 47
  • 48