2010-02-11 34 views
24

tôi đã cố gắng sau Mã với sự giúp đỡ của django.contrib.auth.Userdjango.contrib.auth.Grouplà có một đơn giản để có được tên nhóm của người dùng trong django

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

Nhưng điều đó thất bại và tôi nhận được sau Lỗi:

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 

Nhờ sự giúp đỡ!

Trả lời

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

hoặc với django gần đây

l = request.user.groups.values_list('name',flat=True) 
+0

công trình như một say mê! – icn

4
user.groups.all()[0].name == "groupname" 
+1

Điều này liên quan đến câu hỏi như thế nào? – Aaron

+0

Đúng, không liên quan đến câu hỏi hiện tại, nhưng nó đã giúp những người khác để có được nhóm với tên cụ thể. –

5

Điều này là tốt

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

else: 
    # Action if not existing 
1

này chút có lẽ tad quá muộn (Tôi chỉ tham gia stackoverflow), nhưng đối với bất cứ ai googling cho điều này vào đầu năm 2018, bạn có thể sử dụng thực tế là đối tượng nhóm django (theo mặc định) đi kèm với các trường sau (không đầy đủ, chỉ cần nhập ant ones):

id, tên, quyền, người dùng (có thể có nhiều người dùng; ManyToMany)

Lưu ý rằng một nhóm có thể bao gồm nhiều người dùng và người dùng có thể là thành viên của nhiều nhóm. Vì vậy, bạn chỉ có thể lọc django Nhóm mô hình cho người sử dụng phiên hiện tại (chắc chắn rằng bạn đã thêm các nhóm có liên quan và phân công người dùng/nhóm của mình/s):

''' 
This assumes you have set up django auth properly to manage user logins 
''' 
# import Group models 
from django.contrib.auth.models import Group 

# filter the Group model for current logged in user instance 
query_set = Group.objects.filter(user = request.user) 

# print to console for debug/checking 
for g in query_set: 
    # this should print all group names for the user 
    print(g.name) # or id or whatever Group field that you want to display 
Các vấn đề liên quan