1

我正在尝试使用 Django Rest Framework 和 Ajax 请求来获取用户列表。但是,我收到以下错误

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

不知道我做错了什么 - 我对 DRF 比 vanilla Django 更新。

阿贾克斯调用:

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>")
          })
        }
      });
};

网址.py:

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

视图.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 (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'
4

1 回答 1

1

的第一个参数get_queryset不是请求,而是UserListViewSet,所以self,可以通过 获取请求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)
于 2021-03-21T06:48:22.343 回答