相关疑难解决方法(0)

在迁移中添加django管理员权限:不存在权限匹配查询

我想在手动编写的迁移中添加一些组并为其分配权限,但如果我在干净的DB上运行它,则只有在运行所有迁移后才会创建权限.

我找到了这张票:https: //code.djangoproject.com/ticket/23422但我不能在那里发表评论(我可能会在表达对GeoDjango文档的不满之后被禁止),所以我将分享对解决方案的改进在下面.

django django-permissions django-migrations

14
推荐指数
2
解决办法
5726
查看次数

django 权限:在所有其他迁移之后插入新权限

我向我的模型添加了新权限,然后使用了manage.py makemigrations。它创建了一个改变模型选项(特别是权限......)的迁移。

后来,我添加了一个依赖于第一个迁移的迁移,并使用了权限(我相信创建的第一个迁移)。该迁移使用了查询 auth_permissions 的 RunSQL 操作中的权限。

当我调试迁移时 - 我意识到只有在应用所有迁移之后才会插入身份验证权限。

含义 - 当我尝试查询权限的 id 以便在第二次迁移中使用它时 - 它不存在,因此第二次迁移不会按预期运行。

知道为什么会发生这种情况以及如何预防吗?我在添加新权限时的假设是,它将与 django 为我创建的迁移一起添加......而不是在不同的阶段。

谢谢!

django permissions django-models django-migrations

6
推荐指数
1
解决办法
684
查看次数

为什么我无法在Django中的同一迁移中为组分配新权限

我试图按照此添加新的迁移教程 我增加了新的权限内Metapermissions现场。然后,我创建了迁移,并尝试修改此迁移以适当地更新组权限。但得到DoesNotExistRunPython操作。

from django.db import migrations


def assign_new_permission(apps, *args):
    Permission = apps.get_model('auth.Permission')
    Group = apps.get_model('auth.Group')
    # __fake__.DoesNotExist: Permission matching query does not exist.
    new_permission = Permission.objects.get(
        codename='my_new_permissoin_code')

    admins = Group.objects.get(name='Group name')
    admins.permissions.add(new_permission)


class Migration(migrations.Migration):
    dependencies = [
        ('my_app', '0066_some_migratoin'),
    ]

    operations = [
        migrations.AlterModelOptions(
            name='my_model',
            options={'permissions': (('my_new_permissoin_code',
                                      'Permission name'),)},
        ),
        migrations.RunPython(assign_new_permission)
    ]
Run Code Online (Sandbox Code Playgroud)

django django-models django-permissions django-migrations

1
推荐指数
1
解决办法
484
查看次数