Django元权限

时间:2015-07-11 01:05:47

标签: django django-models

我通过使用' meta'添加自定义权限在Django模型中。请参阅下面的简单示例。

Models.py

class Meta:
    permissions = (
        ("can_do_stuff", "Can do stuff"),
    )

这很好用,我将上面的代码添加到模型中,然后进行迁移,然后迁移它们。该权限已创建并可供使用。

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

如果我100%想出了我的权限系统,这不会成为一个问题但是我在学习的过程中一直在调整一些事情,因此权限列表会因为遗留问题而变得混乱。权限。

我正在开发和发布新版本以供生产使用频繁,并且权限在生产中变得混乱,我不能像开发一样擦除数据库。

有推荐的方法吗?

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

1 个答案:

答案 0 :(得分:0)

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

  

<app_label> <migrationname>:将数据库架构置于应用命名迁移的状态,但不应用同一应用程序中的后续迁移。如果您之前已迁移过指定的迁移,则可能涉及取消应用迁移。使用名称零来取消应用应用的所有迁移。

我的猜测是makemigrations命令扫描模型的权限元,并生成一个&#39;插入&#39;每个丢失的permssion的Permission表中的SQL,它实际上并没有在迁移脚本中进行双向同步。

但是迁移脚本可以通过删除&#39;来恢复更改。每个&#39;插入&#39;的声明。

所以试试:

python manage.py migrate the_app the_migration_before_the_last

如果这也不起作用,请向Django项目提交错误。