我有这样的模型:
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'
我该怎么办?只是进行迁移并手动创建权限?
答案 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)
不知道这是否算作有效的解决方案
上面的方法不适用于新数据库,因为模型在应用就绪时“尚未准备/创建”。所以我切换到post_migrate
信号,一切都很好。
一段时间后,我发现了一个普遍的问题,即为什么我一开始就没有权限和内容类型:我只是没有为非托管模型进行迁移。通过迁移,一切都很好。