gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:13:03 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com