38π
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
:
Company._meta.app_label
Retrieving modelβs lower case name:
Company._meta.model_name
Also, you can retrieve a ContentType
instance representing a model:
ContentType.objects.get_for_model(Company)
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)
3π
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)
0π
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:
codenames.append(f'{action}_{Company._meta.model_name}')
print(codenames)
This should give a coherent list like:
['erp_view_company',
'erp_edit_company',
'erp_delete_company',
'add_company',
'change_company',
'delete_company',
'view_company']
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.
- Django rest framework group based permissions for individual views
- Django + Pydev/Eclipse + Google App Engine β possible?
- Django difference between clear() and delete()