is er een eenvoudige manier om groepsnamen van een gebruiker in django te krijgen

Ik heb geprobeerd de code te volgen met behulp van de django.contrib.auth.Useren django.contrib.auth.Group

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

Maar dat mislukte en ik kreeg de volgende Fout:

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

Bedankt voor alle hulp!


Antwoord 1, autoriteit 100%

Je kunt de groepen van een gebruiker ophalen met request.user.groups.all(), wat een QuerySetzal opleveren. En dan kun je dat object desgewenst in een lijst veranderen.

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

of met recente Django

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

Antwoord 2, autoriteit 24%

Dit is beter

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

Antwoord 3, autoriteit 10%

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

Antwoord 4, autoriteit 8%

Dit is waarschijnlijk een beetje te laat (ik ben net lid geworden van stackoverflow), maar voor iedereen die hier begin 2018 naar googelde, kun je het feit gebruiken dat het django Groups-object (standaard) wordt geleverd met de volgende velden (niet uitputtend, alleen de belangrijkste):

id, naam, permissies, gebruiker (kan veel gebruikers hebben; ManyToMany)

Houd er rekening mee dat een groep uit veel gebruikers kan bestaan ​​en dat een gebruiker lid kan zijn van veel groepen. Je kunt dus eenvoudig het django Groups-modelfilteren voor de huidige gebruikerssessie (zorg ervoor dat je de relevante groepen hebt toegevoegd en de gebruiker aan zijn/haar groep(en) hebt toegewezen):

'''
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

Other episodes