重命名Django自定义权限

时间:2020-01-31 18:43:29

标签: django django-models django-migrations django-permissions

我正在使用django 2.0应用程序,并将django版本更新为3.0。 但是在我的项目中,很少有名为 view_modelname 之类的自定义权限。

class MyConcreteModel(models.Model):
    model_field_1 = models.CharField(max_length=100, blank=False)
    # other fields
    class Meta:
        permissions = (
            ("view_myconcretemodel", "Can see available device interfaces"),
        )      

在Django 3(自v 2.1起)中,此类权限是默认的。所以我与权限名称发生冲突。

现在,我正在尝试重命名自定义权限,然后再更新Django版本。

class MyConcreteModel(models.Model):
    model_field_1 = models.CharField(max_length=100, blank=False)
    # other fields
    class Meta:
        permissions = (
            ("user_view_myconcretemodel", "User can see available device interfaces"),
        )      

迁移后,在数据库中创建了“新”(具有新名称)权限。但是旧的权限仍然存在,所有用户都拥有旧的权限(旧名称如 view_myconcretemodel )。显然,我需要所有用户的“新”权限。

是否有可能简单地重命名权限或向相关用户授予“新”权限(根据“旧”权限)并自动执行?

1 个答案:

答案 0 :(得分:0)

阅读如何以编程方式创建权限后https://docs.djangoproject.com/en/3.2/topics/auth/default/#programmatically-creating-permissions

我的解决方案是修改 codename 模型中的 Permission。即

from django.contrib.auth.models import Permission

perm = Permission.objects.get(codename="view_myconcretemodel") #old name
perm.codename = "user_view_myconcretemodel" #new name
perm.save()