【问题标题】:Django meta permissionsDjango 元权限
【发布时间】:2015-07-11 01:05:47
【问题描述】:

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

模型.py

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

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

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

如果我 100% 了解我的权限系统,这将不是问题,但我在学习过程中一直在微调,结果权限列表因“旧”权限而变得混乱。

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

有推荐的方法吗?

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

【问题讨论】:

  • 您是否尝试过对模型进行一些其他修改以确保创建了新的迁移,并检查了此处没有删除权限?编辑:我在上面找到了closed issue,看起来它已经修复了。

标签: django django-models


【解决方案1】:

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

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

我的猜测是makemigrations 命令会扫描模型的权限元数据,并在权限表中为每个丢失的权限生成一个“插入”SQL,它实际上并没有在迁移脚本中进行双向同步。

但是迁移脚本可以通过对每个“插入”的“删除”语句来恢复更改。

那就试试吧:

python manage.py migrate the_app the_migration_before_the_last

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

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 2022-01-04
    • 2020-01-25
    • 2023-04-05
    相关资源
    最近更新 更多