Django,如何使用django.contrib.auth.models.User通过id获取用户

15

我无法弄清如何通过id获取 Django 模型中的用户,即 django.contrib.auth.models.User。我想要删除一个用户,所以我正在尝试这样查找:

 User.objects.get(id=request.POST['id'])

但它不起作用,并返回

User matching query does not exist.

id是通过ajax发送的:

 $("#dynamic-table").on('click','.member_delete_btn', function() {
        if (confirm("Are you sure? the member will be deleted...") == true) {
            $.ajax({
                type: "POST",
                url: "/panel/member/delete/",
                data: { id: $(this).attr('data-id'), 'csrfmiddlewaretoken': '{{ csrf_token }}' },
                success: function (data) {
                     if(data.success) {
                         $('#result').html('<div class="alert alert-success"> <strong>Well done!</strong> Member deleted.</div>');
                         list_members();
                     }else{
                         $('#result').html('<div class="alert alert-warning"> <strong>Warning!</strong> Member not deleted.</div>');
                     }
                },
                error: function (data) {
                    alert("failure:" + data.error);
                }
            });
        }
        else {
            return false;
        }
        return false;
    });

我调试了它,一切正常,用户存在于数据库中,ID也正确。

我该怎么做呢? Django User 实例是否有任何删除方法?

谢谢


你如何填充POST字典? - karthikr
就像这样 <a data-id="{{ m.user.id }}" href="#" class="btn btn-danger btn-xs member_delete_btn"> <i class="fa fa-times"></i> 删除</a>, data-id 通过 Ajax 传递,一切顺利,我通过打印获取并验证了它的正确性。 - tubadc
这是一个简单的链接点击,还是一个 AJAX post 请求?另外,请编辑问题 - 这样更易读。 - karthikr
我建议您查看django delete view。通过将其作为路由的一部分,您可以忽略post字典。 - C.B.
好的,那么你可能已经删除了这个对象吗?所有的错误信息都在说,你要查找的ID对应的对象不存在。 - karthikr
谢谢,但是 obj 仍然存在,具有相同的 id... 我正在使用 Django 1.7.2。 - tubadc
1个回答

27

这就是正确的方法,问题在于您请求的用户不存在。如果您想处理这种情况,请使用以下方法:

try:
   user_id = int(request.POST['id'])
   user = User.objects.get(id=user_id)
except  User.DoesNotExist:
   //handle the case when the user does not exist. 

此外,您需要将您的ID转换为Int

这里是帖子:<QueryDict: {u'csrfmiddlewaretoken': [u'zRmCkdwrEI6Lk4BgHXfxtd7aYROimsft'], u'id': [u'23']}> ,该id已存在于数据库中.... - tubadc
@tubadc,你需要将你的id转换为整数。我已经更新了我的答案。 - levi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接