目标
能够自动创建带有预定义权限(包括由 django.contrib.auth.signals
自动创建的权限)的几个组。
我的困扰
显然有两种方法可以做到这一点:
- fixtures
- signals
使用第一种选项的问题是:
- 你事先不可能知道预定义权限的 ID(除非可能运行脚本并在纸上记录 ID):
add_
,delete_
,change_
。 - - 如果您决定创建自己的权限,还不知道如何填写 fixture 中的
"pk"
字段,因为已经创建了一些权限。
使用第二种选项的问题是:
- 显然,您的 signals 会在任何其他 signals(包括
django.contrib.auth.signals
)之前运行,因此您无法调用其预定义的权限并将其添加到您的组中。
不仅如此,只需简单地执行以下操作:
def create_initial_groups(**kwargs):
staff_group = Group(name = 'Staff')
clients_group = Group(name = 'Clients')
staff_group.save()
clients_group.save()
并且:
signals.post_syncdb.connect(
create_initial_groups,
dispatch_uid = 'unique_app_identifier.listeners.create_initial_groups'
)
我收到了以下信息:
我得到了这个错误:
django.db.utils.IntegrityError: 违反了唯一约束条件 "auth_group_name_key" 的重复键值 DETAIL: 键值(name)=(Staff)已经存在。
即使使用干净的数据库(在运行python manage.py syncdb
之前,在psql
上运行drop schema public cascade; create schema public;
)。
问题
那么,如果有的话,最干净的方法是什么,可以预填少量组和权限到数据库中?