Django元权限

Django元权限,django,django-models,Django,Django Models,我通过在Django模型中使用“meta”添加自定义权限。下面是一个简单的例子 Models.py class Meta: permissions = ( ("can_do_stuff", "Can do stuff"), ) 这非常有效,我将上面的代码添加到模型中,然后进行迁移,然后进行迁移。该权限已创建并可供使用 但是,当我从模型的“meta”部分删除(或修改)该权限,然后再次makemigrations,migrate时,该权限(已删除/修改)不会从Dja

我通过在Django模型中使用“meta”添加自定义权限。下面是一个简单的例子

Models.py

class Meta:
    permissions = (
        ("can_do_stuff", "Can do stuff"),
    )
这非常有效,我将上面的代码添加到模型中,然后进行迁移,然后进行迁移。该权限已创建并可供使用

但是,当我从模型的“meta”部分删除(或修改)该权限,然后再次
makemigrations
migrate
时,该权限(已删除/修改)不会从Django系统中删除

如果我100%了解了我的权限系统,这不会是一个问题,但我在学习过程中一直在微调内容,因此权限列表与“遗留”权限变得混乱

我经常开发和发布新版本供生产使用,生产中的权限越来越混乱,我不能像在dev中那样擦除DB

有推荐的方法吗


我可以直接从数据库中手动删除遗留权限(这似乎只是我需要删除的一个条目,似乎不会导致任何问题)。这似乎是一种不好的方法,容易出错、被遗忘等。

您是否尝试过向后迁移而不是向前迁移

:使数据库架构处于应用命名迁移的状态,但不会应用同一应用程序中的后续迁移。如果您以前迁移过指定的迁移,则这可能涉及取消应用迁移。使用名称零取消应用程序的所有迁移

我的猜测是,
makemigrations
命令扫描模型的权限元,并在权限表中为每个缺少的Permission生成一个“insert”SQL,它实际上不会在迁移脚本中执行双向同步

但是,迁移脚本可以对每个“insert”使用“delete”语句来还原更改

因此,请尝试:

python manage.py migrate the_app the_migration_before_the_last

如果这也不起作用,请向Django project提交一个bug。

您是否尝试过对模型进行其他修改,以确保创建了新的迁移,并检查了此处未删除权限?。编辑:我在这上面发现了一个问题,看起来已经解决了。