为什么django会创建新的默认权限,即使元中有默认的_权限=()?

为什么django会创建新的默认权限,即使元中有默认的_权限=()?,django,Django,我设置了一些测试应用程序来检查django的行为 用于测试的生成文件: clean: rm db.sqlite3 mig_model: python manage.py migrate flights 0001 mig_all: python manage.py migrate show1 show2: python manage.py shell -c "from django.contrib.auth.models import Permission;

我设置了一些测试应用程序来检查django的行为

用于测试的生成文件:

clean:
    rm db.sqlite3

mig_model:
    python manage.py migrate flights 0001

mig_all:
    python manage.py migrate

show1 show2:
    python manage.py shell -c "from django.contrib.auth.models import Permission; print(list(Permission.objects.values_list('id', 'codename')))"

all: clean mig_model show1 mig_all show2
  • 删除旧数据库
  • 迁移到创建第一个自己的模型时的点
  • 迁移后,应在迁移后信号中创建默认权限。但我在Model.Meta中指定不应创建默认权限
  • 检查所有权限-我可以看到它们确实已生成
  • 迁移所有其他内容,这只是又一次数据迁移,我将删除系统中的所有权限
  • 再次显示所有权限,我可以看到旧权限已被删除,迁移后创建了新权限(它们都有新ID)
models.py:

class Schedule(models.Model):
    flight_day = models.DateField()

    class Meta:
        default_permissions = ()
        permissions = ()
全部生成的输出

.venv ❯ make all
rm db.sqlite3
python manage.py migrate flights 0001
Operations to perform:
  Target specific migration: 0001_initial, from flights
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying flights.0001_initial... OK
python manage.py shell -c "from django.contrib.auth.models import Permission; print(list(Permission.objects.values_list('id', 'codename')))"
[(5, 'add_group'), (6, 'change_group'), (7, 'delete_group'), (8, 'view_group'), (1, 'add_permission'), (2, 'change_permission'), (3, 'delete_permission'), (4, 'view_permission'), (9, 'add_user'), (10, 'change_user'), (11, 'delete_user'), (12, 'view_user'), (13, 'add_contenttype'), (14, 'change_contenttype'), (15, 'delete_contenttype'), (16, 'view_contenttype'), (17, 'add_schedule'), (18, 'change_schedule'), (19, 'delete_schedule'), (20, 'view_schedule'), (21, 'add_scheduleperf'), (22, 'change_scheduleperf'), (23, 'delete_scheduleperf'), (24, 'view_scheduleperf')]
python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, flights, sessions
Running migrations:
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying flights.0002_delete_perms...DELETE ALL (24, {'auth.Group_permissions': 0, 'auth.User_user_permissions': 0, 'auth.Permission': 24})
 OK
  Applying sessions.0001_initial... OK
python manage.py shell -c "from django.contrib.auth.models import Permission; print(list(Permission.objects.values_list('id', 'codename')))"
[(25, 'add_logentry'), (26, 'change_logentry'), (27, 'delete_logentry'), (28, 'view_logentry'), (33, 'add_group'), (34, 'change_group'), (35, 'delete_group'), (36, 'view_group'), (29, 'add_permission'), (30, 'change_permission'), (31, 'delete_permission'), (32, 'view_permission'), (37, 'add_user'), (38, 'change_user'), (39, 'delete_user'), (40, 'view_user'), (41, 'add_contenttype'), (42, 'change_contenttype'), (43, 'delete_contenttype'), (44, 'view_contenttype'), (49, 'add_schedule'), (50, 'change_schedule'), (51, 'delete_schedule'), (52, 'view_schedule'), (53, 'add_scheduleperf'), (54, 'change_scheduleperf'), (55, 'delete_scheduleperf'), (56, 'view_scheduleperf'), (45, 'add_session'), (46, 'change_session'), (47, 'delete_session'), (48, 'view_session')]
来自Django文档:

运行manage.py migrate时将创建这些权限;这个 将django.contrib.auth添加到后首次运行迁移 已安装的应用程序,将为所有应用程序创建默认权限 以前安装的型号,以及正在安装的任何新型号 当时安装的。之后,它将创建默认权限 对于每次运行manage.py migrate(该函数 创建连接到post_迁移信号的权限)

守则:

default_permissions = ()
并不能阻止这种情况发生

如果我知道更多你想做的事,我可能会帮得更好

来自Django文档:

运行manage.py migrate时将创建这些权限;这个 将django.contrib.auth添加到后首次运行迁移 已安装的应用程序,将为所有应用程序创建默认权限 以前安装的型号,以及正在安装的任何新型号 当时安装的。之后,它将创建默认权限 对于每次运行manage.py migrate(该函数 创建连接到post_迁移信号的权限)

守则:

default_permissions = ()
并不能阻止这种情况发生

如果我知道更多你想做的事,我可能会帮得更好