我正在尝试连接一个API端点,以允许管理员通过一个简单的,无主体的PATCH命令来禁用用户。但是,由于某种原因,我的视图get_queryset()
总是返回404:
from django.shortcuts import get_object_or_404
from django.contrib.auth.models import User
from .serializers import UserSerializer
# Disable a User
class DisableCompanyUserView(UpdateAPIView):
model = User
serializer_class = UserSerializer
lookup_url_kwarg = 'user_id'
def get_queryset(self):
print(str(self.kwargs)) # returns {'user_id': '12'}
return get_object_or_404(User, pk=self.kwargs[self.lookup_url_kwarg])
---snip---
我以为可能是类型不匹配(即self.kwargs ['user_id']返回的是字符串而不是int),但是我尝试通过输入12
上述返回值(显然是整数)来查找User,并且仍然返回了404。我还删除了快捷方式函数调用,手动进行了查找,仍然返回了404:
try:
return User.objects.get(pk=self.kwargs[self.lookup_url_kwarg])
# return User.objects.get(pk=12) # also returns a 404
except User.DoesNotExist:
raise Http404()
我期待在原始auth_user
现在表,那里面有一条记录与id
的12
,所以我知道该用户存在。我究竟做错了什么?
tgdn帮助我意识到我做的事情确实很愚蠢:我试图过滤get_queryset()
应该返回所有用户的特定用户。
我能够使事情像这样工作:
# Update a User
class DisableCompanyUserView(UpdateAPIView):
model = User
serializer_class = UserSerializer
lookup_url_kwarg = 'user_id'
def get_queryset(self):
return User.objects.all()
def partial_update(self, request, *args, **kwargs):
kwargs['partial'] = True
return self.update(request, *args, **kwargs)
我将其简化为:
# Update a User
class DisableCompanyUserView(UpdateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
lookup_url_kwarg = 'user_id'
def partial_update(self, request, *args, **kwargs):
kwargs['partial'] = True
return self.update(request, *args, **kwargs)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句