我想知道如何在views.py中获取当前用户ID?此外,如何获取当前用户的组ID?我是否必须使用用户ID直接查询数据库?非常感谢你。
答案 0 :(得分:4)
查看函数获取request
作为其参数之一。假设您使用的是内置的auth应用程序,则当前用户(如果有)将为request.user
。如果会话没有登录用户,这可能是anonymous user的表示 - 如果您不想允许,请参阅docs。
用户可以在多个群组中,因此我不太确定“群组ID”的含义。用户的组可用作标准的多对多字段,request.user.groups
。这是一个管理器对象,因此您可以对其应用过滤器等,以便全部使用它们,request.user.groups.all()
。
答案 1 :(得分:2)
user = auth.get_user(request)
group = request.user.groups.values_list('name', flat=True).first()
作品完美!
所以你可以用'id'替换'name'来获取群组ID
答案 2 :(得分: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
)
)
如果您在对用户进行分类后,只需扩展用户模型并设置外键字段即可。使用权限组对我来说似乎不是一个好方法。