Django元权限
我通过在Django模型中使用“meta”添加自定义权限。下面是一个简单的例子 Models.pyDjango元权限,django,django-models,Django,Django Models,我通过在Django模型中使用“meta”添加自定义权限。下面是一个简单的例子 Models.py class Meta: permissions = ( ("can_do_stuff", "Can do stuff"), ) 这非常有效,我将上面的代码添加到模型中,然后进行迁移,然后进行迁移。该权限已创建并可供使用 但是,当我从模型的“meta”部分删除(或修改)该权限,然后再次makemigrations,migrate时,该权限(已删除/修改)不会从Dja
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。您是否尝试过对模型进行其他修改,以确保创建了新的迁移,并检查了此处未删除权限?。编辑:我在这上面发现了一个问题,看起来已经解决了。