rea*_*not 6 python django permissions django-models
默认情况下,每个django模型都有3个权限(添加,更改,删除).在模型中,我可以定义我的自定义权限以添加更多.
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"),
)
Run Code Online (Sandbox Code Playgroud)
迁移时,会在数据库级别自动创建这些权限.如何从模型中检索所有权限?
# 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)
Run Code Online (Sandbox Code Playgroud)
Ern*_*Ten 12
我会建议你这样的事情:
all_permissions = Permission.objects.filter(content_type__app_label='app label', content_type__model='lower case model name')
Run Code Online (Sandbox Code Playgroud)
检索模型app_label:
Company._meta.app_label
Run Code Online (Sandbox Code Playgroud)
检索模型的小写名称:
Company._meta.model_name
Run Code Online (Sandbox Code Playgroud)
此外,您可以检索ContentType表示模型的实例:
ContentType.objects.get_for_model(Company)
Run Code Online (Sandbox Code Playgroud)
由于ContentType使用缓存,这是完全可以接受的.因此,还有另一种方法可以实现您的需求:
content_type = ContentType.objects.get_for_model(Company)
all_permissions = Permission.objects.filter(content_type=content_type)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3866 次 |
| 最近记录: |