在为用户分配权限时,我收到错误django.contrib.auth.models.Permission.DoesNotExist: Permission matching query does not exist
。
当我查看数据库时,我发现模型没有显示为内容类型; django也没有为它们创建默认的添加/更改/删除/查看权限。
如何解决此问题?
我尝试过的事情:
1.在新数据库上运行python manage.py migrate
....问题依然存在。
1.取消应用所有迁移,然后重新应用它们...问题依然存在。
1.在我的任何应用程序迁移之前应用auth,contenttypes,sessions,admin迁移。问题依然存在。
我使用的部分代码片段如下:
app = "MyApp"
model = "MyModel"
users = "user1"
userGroup = "group1"
permissionsString = "advc"
modelClass = apps.get_model(app, model)
contentType = ContentType.objects.get_for_model(modelClass)
if (contentType == None):
raise Exception("ContentType isn't available.")
permissions = Permission.objects.filter(content_type = contentType)
for permissionLiteral in permissionsString:
if (permissionLiteral == 'a'):
permission = permissions.get(codename__startswith = 'add_')
elif (permissionLiteral == 'c'):
permission = permissions.get(codename__startswith = 'change_')
elif (permissionLiteral == 'd'):
permission = permissions.get(codename__startswith = 'delete_')
elif (permissionLiteral == 'v'):
permission = permissions.get(codename__startswith = 'view_')
else:
raise Exception("Invalid permission literal.")
if (permission != None):
group.permissions.add(permission)
- app =我的应用程序的名称被传递给函数
- model =传递给函数的模型名称
- permissionsString =为所有4个权限传递'advc';'v'仅用于查看权限。
执行任何permission = permissions.get(...)
语句时都会引发错误django.contrib.auth.models.Permission.DoesNotExist: Permission matching query does not exist
。
1条答案
按热度按时间d4so4syb1#
我找到了答案,感谢#django IRC频道。
因此,问题是content_types和权限是由post_migration信号创建的;而不是在迁移过程中。这就是为什么它们在迁移时不可用的原因。(更多信息,请阅读this django discussion)
因此,作为django开发者,我们需要遵循以下标准实践:
1.迁移需要专门保留用于对数据库的原理图更改;不要在迁移过程中执行数据迁移和权限分配。
1.对于数据迁移和权限分配,创建django-admin命令。django-admin命令在django文档here和here中解释。
再次感谢django IRC频道的hop和dodo。特别感谢hop连夜排除故障并解决了这个问题。