我正在使用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 )。显然,我需要所有用户的“新”权限。
是否有可能简单地重命名权限或向相关用户授予“新”权限(根据“旧”权限)并自动执行?
答案 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()