定义默认组和权限的最简单方法是什么?
目标
能够自动创建几个带有预定义权限的用户组(包括通过 django.contrib.auth.signals
自动创建的权限)。
我的困扰
看起来有两种方法可以做到这一点:
- 使用数据文件(fixtures)
- 使用信号(signals)
选择第一种方法会遇到以下问题:
- 你无法提前知道预定义权限的ID(比如
add_
,delete_
,change_
),除非你先运行一次脚本,然后把ID记下来。 - 如果你决定自己创建权限,你也不知道该如何在数据文件中填充
"pk"
字段,因为有些权限已经被创建了。
选择第二种方法的问题是:
- 你的信号会在其他信号之前运行,包括
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: duplicate key value violates unique constraint "auth_group_name_key" DETAIL: Key (name)=(Staff) already exists.
即使是在一个干净的数据库中(在 psql
中运行 drop schema public cascade; create schema public;
之后,再运行 python manage.py syncdb
)。
问题
那么,如果有的话,最简单的方法是什么,以便预先填充数据库,创建几个用户组和权限?