我想在一个抽象模型类上定义一些自定义权限,然后由所有子类继承,而不是给权限一个可以应用于任何子类模型类型的通用对象名称,我想本质上使用子模型的 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/