By default each django model has 3 permissions (add, change, delete). In a model I can define my custom permission to adds more.
class Company(models.Model):
owner = models.ForeignKey(User)
name = models.CharField(max_length=64, unique=True)
description = models.TextField(max_length=512)
created_on = models.DateTimeField(auto_now_add=timezone.now)
class Meta:
permissions = (
("erp_view_company", "Can see the company information"),
("erp_edit_company", "Can edit the company information"),
("erp_delete_company", "Can delete the company"),
)
When you migrate, these permissions are automatically created at DB level. How can you retrieve all the permissions from a model?
# retrieves the permissions
permissions = Permission.objects.filter(get_all_permissions_of_model_Company)
# adds permissions to group
group = Group.objects.create(name='foo', permissions=permissions)
# adds user to group
user.groups.add(group)
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)