django - 如何在 Django 抽象模型类中动态命名权限?

标签 django django-models django-permissions

我想在一个抽象模型类上定义一些自定义权限,然后由所有子类继承,而不是给权限一个可以应用于任何子类模型类型的通用对象名称,我想本质上使用子模型的 verbose_name_plural 属性作为权限名称和描述的一部分(例如 ('view_classname', 'Can view classname')),模拟 Django 的默认行为。

所以,我希望做的是这样的事情(这是行不通的,因为 verbose_name_plural 没有在这个上下文中定义):

class AbstractModel(models.Model):
    class Meta:
        abstract = True
        permissions = (
            (u'view_%ss' % verbose_name_plural, u'Can view %s' % verbose_name_plural),
        )

(此问题在 http://code.djangoproject.com/ticket/10686 中也有描述,其中包含一个实现动态替换权限定义中的 %(class)s 的补丁,但此补丁从未被接受,我的生产环境确实接受了不允许修补 Django。)

最佳答案

你能用类装饰器而不是抽象模型类来完成这个吗?

def with_view_perm(cls):
    vn = cls.Meta.verbose_name_plural
    perms = (('view_%s' % vn, 'Can view %s' % vn),)
    cls.Meta.perms += perms
    return cls

@with_view_perm
class Child(models.Model):
    class Meta:
        verbose_name_plural = 'children'
        perms = (('change_children', 'Can change children'),)

关于django - 如何在 Django 抽象模型类中动态命名权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963428/

相关文章:

python - Django:在事务中保存多个 ManyToMany 字段

django - 在 django 的单元测试期间无法更改用户权限

python - django admin css 不加载设置

python - 如何正确应用 django/jinja2 模板过滤器 'escape' 和 'linebreaks'?

Django:在一个循环中遍历模板中的多个连续多对多关系

Django:在一个页面中创建基于功能的 View 登录和注册表单

python - 如何在 Django 模型中按不同模型中的字段降序排序?

python - Django中的多态模型继承

django - 如何在管理站点的组或用户权限列表中显示添加或更改 Django 模型的权限?

django-admin - django 管理员修改模型属性的权限