gpt4 book ai didi

python - 定义默认组和权限的最简单方法是什么?

转载 作者:行者123 更新时间:2023-11-28 18:41:26 26 4
gpt4 key购买 nike

目标

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

我的奋斗

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

  1. 固定装置
  2. 信号

第一个选项的问题是:

  • 您不可能事先知道(除了可能通过运行一次脚本并在纸上记下 ID),预定义权限的 ID 是什么(add_delete_ , change_). -
  • 如果您决定创建自己的权限,您也不知道如何填充夹具中的 “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.

即使使用干净的数据库(在 python manage.py syncdb 之前在 psql 上运行 drop schema public cascade; create schema public;)。

问题

那么,如果存在的话,用很少的组和权限预填充数据库的最干净的方法是什么?

最佳答案

如果您可以将这些自定义权限与您的模型相关联,请尝试在 permissions attribute inside model's Meta 下定义它们类。

为您的自定义组创建灯具,但使用 natural keys在序列化它们时,以便它们通过名称而不是 pk 来引用相关权限。

关于python - 定义默认组和权限的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25583134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com