为什么我不能通过pk或id对象(。)(Django用户)?

时间:2015-04-16 23:28:02

标签: django

我尝试连接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的记录在那里,所以我知道该用户存在。我做错了什么?

2 个答案:

答案 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)