I want to get a list of all Django auth user with a specific permission group, something like this:
user_dict = {
\'queryset\': User.objects.filter(permi
Try this:
User.objects.filter(groups__permissions = Permission.objects.get(codename='blogger'))
$ python manage.py shell <<'EOF'
> from django.contrib.auth.models import User
> User.objects.filter(groups__name='blogger')
> EOF
...
(InteractiveConsole)
>>> >>> [<User: foo>, <User: bar>, <User: baz>, '...(remaining elements truncated)...']
(simplified from cms' answer, which I can't edit)
Do not forget that specifying permission codename is not enough because different apps may reuse the same codename. One needs to get permission object to query Users correctly:
def get_permission_object(permission_str):
app_label, codename = permission_str.split('.')
return Permission.objects.filter(content_type__app_label=app_label, codename=codename).first()
def get_users_with_permission(permission_str, include_su=True):
permission_obj = get_permission_object(permission_str)
q = Q(groups__permissions=permission_obj) | Q(user_permissions=permission_obj)
if include_su:
q |= Q(is_superuser=True)
return User.objects.filter(q).distinct()
Code with imports: https://github.com/Dmitri-Sintsov/django-jinja-knockout/blob/master/django_jinja_knockout/models.py