AttributeError: x object has no attribute 'GET' (DRF)

Viewed 384

I am trying to grab a user's list using Django Rest Framework and an Ajax request. However, I get the following error

AttributeError: 'UserListViewSet' object has no attribute 'GET'

Not sure what I am doing wrong - I am newer to DRF than vanilla Django.

Ajax call:

const showUserLists = function(map){
  let userName = "Henry";

  $.ajax({
      type: 'GET',
      url: '/api/userlist/',
      data: {
        'username': userName
      },
      success: function (data) {
        data.forEach(item => { 
              console.log(item.list_name)
              $("#userLists").append("<li class=userlist data-name=\"" + item.list_name + "\">" + item.list_name + "</li>")
          })
        }
      });
};

urls.py:

router = DefaultRouter()
router.register('userlist', views.UserListViewSet, basename= 'userlist')
router.register('uservenue', views.UserVenueViewSet, basename= 'uservenue')

views.py

#this shows all lists for a user
class UserListViewSet(viewsets.ModelViewSet):
    serializer_class = UserListSerializer
 
    def get_queryset(request):
        name = request.GET.get('username', None)
        return UserList.objects.filter(user=name)

Traceback:

Traceback (most recent call last):
  File "/Users/x/Desktop/Coding/anybody/avenv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/Users/x/Desktop/Coding/anybody/avenv/lib/python3.6/site-packages/django/core/handlers/base.py", line 179, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/x/Desktop/Coding/anybody/avenv/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/Users/x/Desktop/Coding/anybody/avenv/lib/python3.6/site-packages/rest_framework/viewsets.py", line 114, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/x/Desktop/Coding/anybody/avenv/lib/python3.6/site-packages/rest_framework/views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "/Users/x/Desktop/Coding/anybody/avenv/lib/python3.6/site-packages/rest_framework/views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/Users/x/Desktop/Coding/anybody/avenv/lib/python3.6/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
    raise exc
  File "/Users/x/Desktop/Coding/anybody/avenv/lib/python3.6/site-packages/rest_framework/views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "/Users/x/Desktop/Coding/anybody/avenv/lib/python3.6/site-packages/rest_framework/mixins.py", line 38, in list
    queryset = self.filter_queryset(self.get_queryset())
  File "/Users/x/Desktop/Coding/anybody/anybody1/api/views.py", line 33, in get_queryset
    name = request.GET.get('username', None)
AttributeError: 'UserListViewSet' object has no attribute 'GET'
1 Answers

The first parameter of get_queryset is not a request, but the UserListViewSet, so the self, you can obtain the request with self.request:

class UserListViewSet(viewsets.ModelViewSet):
    serializer_class = UserListSerializer
 
    def get_queryset(self):
        name = self.request.GET.get('username', None)
        return UserList.objects.filter(user=name)
Related