在Django中,有简单的方法获取用户的组名吗

68 投票
5 回答
106117 浏览
提问于 2025-04-15 19:09

我尝试使用 django.contrib.auth.Userdjango.contrib.auth.Group 这两个功能来写代码。

for g in request.user.groups:
    l.append(g.name)

但是这样做失败了,我收到了以下的 错误信息

TypeError at /
'ManyRelatedManager' object is not iterable
Request Method: GET
Request URL:    http://localhost:8000/
Exception Type: TypeError
Exception Value:    
'ManyRelatedManager' object is not iterable
Exception Location: C:\p4\projects\...\users.py in permission, line 55

谢谢大家的帮助!

5 个回答

13

在编程中,有时候我们需要把一些数据从一个地方转移到另一个地方。这就像把水从一个杯子倒到另一个杯子一样。我们可以用不同的方法来做到这一点,比如使用变量、数组或者对象。

变量就像一个小盒子,可以用来存放数据。你可以把水倒进这个盒子里,然后再从盒子里倒出来。数组则是一个装了很多小盒子的盒子,你可以在里面放很多数据,就像一个装满了不同饮料的冰箱。而对象则更复杂一些,它可以存放不同类型的数据,就像一个多功能的工具箱,里面有各种各样的工具。

在编程时,我们还需要考虑数据的类型。数据类型就像是水的温度,有热水、冷水、冰水等。不同的数据类型适合不同的操作,比如数字可以用来计算,而文字则用来描述事物。

总之,理解这些基本概念可以帮助你更好地处理数据,就像学会了如何倒水一样简单。

user.groups.all()[0].name == "groupname"
40

这样更好

if user.groups.filter(name='groupname').exists():
    # Action if existing

else:
    # Action if not existing
142

你可以通过 request.user.groups.all() 来获取一个用户的所有组,这个方法会返回一个 QuerySet 对象。如果你想的话,可以把这个对象转换成一个列表。

for g in request.user.groups.all():
    l.append(g.name)

或者在最近的 Django 版本中

l = request.user.groups.values_list('name',flat = True) # QuerySet Object
l_as_list = list(l)                                     # QuerySet to `list`

撰写回答