[Fixed]-How to retrieve all permissions of a specific model in django?


I would suggest you something like this:

all_permissions = Permission.objects.filter(content_type__app_label='app label', content_type__model='lower case model name')

Retrieving model’s app_label:


Retrieving model’s lower case name:


Also, you can retrieve a ContentType instance representing a model:


Since ContentType uses a cache, it is quite acceptable. Thus, there is another way to achieve what you need:

content_type = ContentType.objects.get_for_model(Company)
all_permissions = Permission.objects.filter(content_type=content_type)


you can check on codename field which will be something like: 'change_company' etc …

model_name = 'company'
all_perms_on_this_modal = Permission.objects.filter(codename__contains=model_name)


I wanted to achieve this without touching the database, using the Meta class instead. Django gives you everything you need, but it takes a little arm twisting.

codenames = [t[0] for t in Company._meta.permissions]
for action in Company._meta.default_permissions:

This should give a coherent list like:


So in my case, there are many scenarios where I want a list of valid codenames to create a query, and it’s not reasonable to have someone execute multiple queries in that process if it is performance-sensitive.


Leave a comment