【发布时间】:2014-09-21 09:14:22
【问题描述】:
我一直试图在 Django Auth 文档中找到答案,但似乎找不到我要找的东西。
我遇到的问题是,当我定义添加组的代码时(与管理页面中的组相同):
#read_only
group, created = Group.objects.get_or_create(name='read_only')
if created:
group.permissions.add(can_read_campaign)
logger.info('read_only_user Group created')
#standard
group, created = Group.objects.get_or_create(name='standard_user')
if created:
group.permissions.add(can_edit_users)
logger.info('standard_user Group created')
#admin
group, created = Group.objects.get_or_create(name='admin_user')
if created:
group.permissions.add(can_edit_campaign, can_edit_users)
logger.info('admin_user Group created')
当我在 models.py 和 init.py 中运行此代码时,它们都给了我这个错误:
django.core.exceptions.AppRegistryNotReady
我认为这是由于 Model/init 试图过早将内容插入 django 应用程序/管理员?
如何以编程方式添加这些组?
编辑:
这不是一个重复的问题,这实际上是在项目设置期间在模型中添加权限和组,而不是通过 shell。
我已经通过使用信号和接收器(django 模块)解决了这个问题。
我将用于创建权限/组的代码添加到它自己的函数中,并用接收器 (post_migrate) 对其进行修饰,它将在迁移完成后运行此函数,从而消除此错误。
@receiver(post_migrate)
def init_groups(sender, **kwargs):
#permission and group code goes here
【问题讨论】:
-
您需要调用
setup()函数。我会将此作为重复项关闭 - 让我们知道它是否真的不止于此。 -
嗨@alecxe,这不是一个重复的问题,我已经为你提供了一个编辑。
标签: python django django-models django-admin