我想知道在views.py中如何获取当前用户ID?此外,如何获取当前用户的组ID?我需要使用用户ID直接查询数据库吗?非常感谢。
我想知道在views.py中如何获取当前用户ID?此外,如何获取当前用户的组ID?我需要使用用户ID直接查询数据库吗?非常感谢。
user = auth.get_user(request)
group = request.user.groups.values_list('name', flat=True).first()
非常完美!
因此,您可以将'name'替换为'id',以获取组的ID。
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
)
)
@csrf_exempt
def auth_check(request):
return HttpResponse(str(request.user)) # <- breakpoint
你可以看到请求中有user.groups
。
request.user.groups.name
groups.all()
返回实际的Group
对象。如果你print
它们,它们将使用它们的名称表示,但是groups.all()[0].somefield
也应该可以工作。除非你对模型进行了扩展并改变了关系。如果是这种情况,你需要在问题中展示你的自定义模型代码。 - Peter DeGlopper