如何定义默认组和权限最简单?

3

目标

能够自动创建带有预定义权限(包括由 django.contrib.auth.signals 自动创建的权限)的几个组。

我的困扰

显然有两种方法可以做到这一点:

  1. fixtures
  2. 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;)。

问题

那么,如果有的话,最干净的方法是什么,可以预填少量组和权限到数据库中?


我为了预填充我的数据库而创建了一个特定的命令,每个数据都有一个对应的命令。这个命令基本上是一个独立运行的Python程序。 - Lara
1个回答

1
如果您可以将这些自定义权限与您的模型相关联,请尝试在模型的Meta类下定义它们的permissions属性
为您的自定义组创建装置,但在序列化时使用natural keys,以便它们通过名称而不是pk引用相关权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接