Django:如何获取当前用户的组ID

3

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

4个回答

6
user = auth.get_user(request)
group = request.user.groups.values_list('name', flat=True).first()

非常完美!

因此,您可以将'name'替换为'id',以获取组的ID。


5
视图函数的参数之一是request。假设您正在使用内置的认证应用程序,当前用户(如果有)将是request.user。如果会话没有已登录的用户,则可能是匿名用户的表示形式-如果不想允许该用户,请参见文档
用户可以在许多组中,因此我不太确定您所说的“组ID”是什么意思。用户的组可用作标准的多对多字段,如request.user.groups。那是一个管理器对象,因此您可以对其应用过滤器等操作-要获取所有组,请使用request.user.groups.all()

谢谢!我需要群组ID,因为我已经扩展了群组模型,所以我认为我需要群组ID来获取字段值。但是使用request.user.groups.all(),似乎它只返回群组的名称... - Robert
groups.all() 返回实际的 Group 对象。如果你 print 它们,它们将使用它们的名称表示,但是 groups.all()[0].somefield 也应该可以工作。除非你对模型进行了扩展并改变了关系。如果是这种情况,你需要在问题中展示你的自定义模型代码。 - Peter DeGlopper
兄弟,我又有一个问题:http://stackoverflow.com/questions/19898284/django-why-the-manytomany-choice-box-only-has-on-side 你能帮我解决一下吗? - Robert

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

如果您想对用户进行分类,只需扩展用户模型并设置外键字段即可。对于此事使用权限组似乎不是一个好的方法。

0
如果您在下面的方法上设置断点进行调试,
@csrf_exempt
def auth_check(request):
    return HttpResponse(str(request.user)) # <- breakpoint

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

Imgur

如上所示,您可以在上面突出显示的部分找到用户所属的组名称。
您可以轻松获取用户组ID。
request.user.groups.name

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