Django

2010-02-11 28 views
24

में एक उपयोगकर्ता के समूह के नाम पाने के लिए मैं django.contrib.auth.User और django.contrib.auth.GroupDjango

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 

किसी भी मदद के लिए धन्यवाद!

उत्तर

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

या हाल ही में Django के साथ

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

काम करता है: तो आप केवल वर्तमान उपयोगकर्ता के सत्र के लिए Django समूह मॉडल (सुनिश्चित करें कि आप प्रासंगिक समूहों जोड़ा गया है और उसकी/उसके समूह/s उपयोगकर्ता सौंपा है बनाना) फ़िल्टर कर सकते हैं! – icn

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

यह प्रश्न के लिए प्रासंगिक कैसे है? – Aaron

+0

सच है, वर्तमान प्रश्न के लिए प्रासंगिक नहीं है, लेकिन इसने दूसरों को विशिष्ट नाम के साथ समूह प्राप्त करने में मदद की है। –

5

यह बेहतर

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

else: 
    # Action if not existing 
1

यह शायद बालक है बिट बहुत देर हो चुकी (मैं सिर्फ stackoverflow में शामिल हो गए हैं), लेकिन किसी के लिए googling के लिए है यह 2018 की शुरुआत में, आप इस तथ्य का उपयोग कर सकते हैं कि django समूह ऑब्जेक्ट (डिफ़ॉल्ट रूप से) निम्न फ़ील्ड के साथ आता है (संपूर्ण नहीं, केवल आयात चींटी वाले):

आईडी, नाम, अनुमतियां, उपयोगकर्ता (कई उपयोगकर्ता हो सकते हैं; ManyToMany)

ध्यान दें कि एक समूह में कई उपयोगकर्ता शामिल हो सकते हैं, और उपयोगकर्ता कई समूहों का सदस्य बन सकता है।

एक आकर्षण की तरह
''' 
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