首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检索django中特定模型的所有权限?

如何检索django中特定模型的所有权限?
EN

Stack Overflow用户
提问于 2016-07-15 08:45:25
回答 2查看 11.3K关注 0票数 12

默认情况下,每个django模型都有3个权限(添加、更改、删除)。在模型中,我可以定义我的自定义权限来添加更多内容。

代码语言:javascript
复制
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"),
        )

迁移时,这些权限将在DB级别自动创建。如何从模型中检索所有权限?

代码语言:javascript
复制
# 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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-15 08:57:38

我建议你这样做:

代码语言:javascript
复制
all_permissions = Permission.objects.filter(content_type__app_label='app label', content_type__model='lower case model name')

检索模型的app_label

代码语言:javascript
复制
Company._meta.app_label

检索模型的小写名称:

代码语言:javascript
复制
Company._meta.model_name

另外,您还可以使用 instance representing a model

代码语言:javascript
复制
ContentType.objects.get_for_model(Company)

因为ContentType使用缓存,所以它是可以接受的。因此,有另一种方法可以实现您所需要的:

代码语言:javascript
复制
content_type = ContentType.objects.get_for_model(Company)
all_permissions = Permission.objects.filter(content_type=content_type)
票数 35
EN

Stack Overflow用户

发布于 2016-07-15 08:50:23

您可以检查codename字段,它将类似于:'change_company'等.

代码语言:javascript
复制
model_name = 'company'
all_perms_on_this_modal = Permission.objects.filter(codename__contains=model_name)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38391729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档