【问题标题】:AttributeError: x object has no attribute 'GET' (DRF)AttributeError:x 对象没有属性“GET”(DRF)
【发布时间】:2021-06-18 02:57:16
【问题描述】:

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

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

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

Ajax 调用:

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 (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'

【问题讨论】:

    标签: django ajax django-rest-framework django-views


    【解决方案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)

    【讨论】:

    • 感谢您的帮助,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 2020-07-03
    • 1970-01-01
    • 2021-08-21
    • 2014-04-28
    相关资源
    最近更新 更多