Django 如何仅将自定义权限与syncdb同步?
是否可以让manage.py syncdb命令仅将自定义权限同步到Django 如何仅将自定义权限与syncdb同步?,django,django-models,Django,Django Models,是否可以让manage.py syncdb命令仅将自定义权限同步到auth_permission表?我不希望为应用程序模型安装默认的三个权限,即foo.add\u bar,foo.change\u bar,foo.delete\u bar。我在模型类中指定自定义权限,如django文档所示: class Meta: permissions = ( ("admin", "Can create/edit/delete projects"), ("user",
auth_permission
表?我不希望为应用程序模型安装默认的三个权限,即foo.add\u bar
,foo.change\u bar
,foo.delete\u bar
。我在模型类中指定自定义权限,如django文档所示:
class Meta:
permissions = (
("admin", "Can create/edit/delete projects"),
("user", "Can view projects"),
)
谢谢大家! 这里有两种解决方案:
auth_permission
表中手动插入李>
management.commands
包中创建一个模块sync_perms.py
(带有代码片段)
然后运行:
python manage.py sync_perms
瞧 刚刚将解决方案发布到 .
这样做的目的不是阻止syncdb创建它们,而是在管理界面中隐藏它们。您需要将Meta上的
默认\u权限指定为空元组。(默认值为('add'、'change'、'delete')
)
我还喜欢使用带有Meta.managed=False的特殊MyAppProperties
模型来持有我的应用程序范围的权限
class MyAppPermissions(models.Model):
# properties definition...
class Meta:
managed = False
permissions = (
("admin", "Can create/edit/delete projects"),
("user", "Can view projects"),
)
default_permissions = ()
这样,它不会创建数据库表,而是创建数据库表的权限 首先,您必须找到应用程序的内容类型id,即内容类型
可以通过此查询找到
select * from django_content_type;
然后执行查询以向数据库添加所需的自定义权限,例如
insert into auth_permission(name,content_type_id,codename) values
('Can add name',12,'can_add_name');
在上面的查询中,name是用户在permissions列表中看到的字符串,number是从第一个查询中找到的应用程序id,codename是您将在模板中使用的代码,例如在您可以使用的模板中
{{perms.application.can_add_name}}
看看你的链接是绝对没有意义的…来自django.db.models导入get_models,get_app
在django3中似乎已被弃用。
{{perms.application.can_add_name}}