我尝试连接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)但我尝试通过输入{{1}来查找用户上面的返回(显然是一个整数)并且仍然返回404.我还扯掉了快捷函数调用,手动执行了查找,仍然找回了404:
12
我现在正在查看原始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
的记录在那里,所以我知道该用户存在。我做错了什么?
答案 0 :(得分:1)
如果您尝试使用
进行查找User.objects.get(id=theId)
这会返回任何对象吗?
pk
只是id__iexact
修改强>
您是否尝试过手动
User.objects.filter(pk=yourID)[0]
这可以让你得到结果。否则,请尝试
User.objects.all()
看看你是否能找到你正在寻找的用户
答案 1 :(得分:0)
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)