How to get a list of all users with a specific permission group in Django

前端 未结 9 787
遇见更好的自我
遇见更好的自我 2020-12-12 16:13

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         


        
相关标签:
9条回答
  • 2020-12-12 16:54

    Try this:

    User.objects.filter(groups__permissions = Permission.objects.get(codename='blogger'))
    
    0 讨论(0)
  • 2020-12-12 16:59
    $ 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)

    0 讨论(0)
  • 2020-12-12 16:59

    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

    0 讨论(0)
提交回复
热议问题