如何为非托管模型生成内置模型权限?

时间:2020-03-03 16:51:53

标签: django django-models

我有这样的模型:

class Venue(models.Model):
    name = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'venue'
        permissions = [
            ('change_venue', 'Can change venue'),
        ]

它未被管理,因为它已经存在于数据库中(该数据库在django项目之前创建)。

我想使用django的内置模型权限,但默认情况下未创建它们。我尝试通过更改Meta.permissions字段来添加它们,但收到错误消息:The permission codenamed 'change_venue' clashes with a builtin permission for model 'events.Venue'

我该怎么办?只是进行迁移并手动创建权限?

1 个答案:

答案 0 :(得分:0)

通过在App.ready钩中创建权限来解决:

from django.apps import AppConfig
from django.contrib.auth.management import create_permissions


class MyAppConfig(AppConfig):
    name = 'myapp'

    def ready(self):
        create_permissions(self)

不知道这是否算作有效的解决方案

编辑1

上面的方法不适用于新数据库,因为模型在应用就绪时“尚未准备/创建”。所以我切换到post_migrate信号,一切都很好。

编辑2

一段时间后,我发现了一个普遍的问题,即为什么我一开始就没有权限和内容类型:我只是没有为非托管模型进行迁移。通过迁移,一切都很好。