Django 如何仅将自定义权限与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",

是否可以让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", "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}}