3

我想知道如何在views.py 中获取当前用户ID?此外,如何获取当前用户的组 ID?我是否必须使用用户 ID 直接查询数据库?非常感谢你。

4

4 回答 4

5

视图函数获取request作为它们的参数之一。假设您使用的是内置的身份验证应用程序,当前用户(如果有)将是request.user. 如果会话没有登录用户,这可能是匿名用户的表示 -如果您不想允许,请参阅文档。

用户可以在许多组中,所以我不太确定您所说的“组 id”是什么意思。用户组可作为标准的多对多字段使用,如request.user.groups. 那是一个管理器对象,因此您可以对其应用过滤器等 - 以获取所有这些,request.user.groups.all().

于 2013-11-10T06:45:31.450 回答
5
user = auth.get_user(request)
group = request.user.groups.values_list('name', flat=True).first()

完美运行!

所以你可以用'id'替换'name'来获取组的ID

于 2016-10-13T20:58:52.830 回答
0

如果在您的用例中每个用户只有一个组,您可以使用request.user.groups.get(). objects.get()有点类似于objects.all()[0]. 因此,当该用户有多个组时,它将失败。

https://github.com/django/django/blob/master/django/db/models/query.py

def get(self, *args, **kwargs):
    """
    Performs the query and returns a single object matching the given
    keyword arguments.
    """
    clone = self.filter(*args, **kwargs)
    if self.query.can_filter():
        clone = clone.order_by()
    clone = clone[:MAX_GET_RESULTS + 1]
    num = len(clone)
    if num == 1:
        return clone._result_cache[0]
    if not num:
        raise self.model.DoesNotExist(
            "%s matching query does not exist." %
            self.model._meta.object_name)
    raise self.model.MultipleObjectsReturned(
        "get() returned more than one %s -- it returned %s!" % (
            self.model._meta.object_name,
            num if num <= MAX_GET_RESULTS else 'more than %s' % MAX_GET_RESULTS
        )
    )

如果您在对用户进行分类之后,只需扩展用户模型并设置外键字段。在这件事上使用权限组对我来说似乎不是一个好方法。

于 2013-11-10T08:38:28.253 回答
0

如果您使用以下方法的断点进行调试,

@csrf_exempt
def auth_check(request):
    return HttpResponse(str(request.user)) # <- breakpoint

你可以看到user.groups请求中有。

伊姆古尔

如上面突出显示的部分所示,您可以找到用户所属的组名称。

您可以轻松获取用户组 ID

request.user.groups.name
于 2021-09-21T01:55:39.710 回答