gpt4 book ai didi

python - Django 1.7 将以编程方式添加组的代码放在哪里?

转载 作者:太空狗 更新时间:2023-10-29 16:53:53 24 4
gpt4 key购买 nike

我一直试图在 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 app/admin?

如何以编程方式添加这些组?

编辑:

这不是一个重复的问题,这实际上是在项目设置期间在模型中添加权限和组,而不是通过 shell。

我已经通过使用信号和接收器(django 模块)解决了这个问题。

我将创建权限/组的代码添加到它自己的函数中,并用接收器 (post_migrate) 对其进行修饰,它将在迁移完成后运行此函数,从而消除此错误。

@receiver(post_migrate)
def init_groups(sender, **kwargs):
#permission and group code goes here

最佳答案

我被推荐了this实现方式:

在适当的模块中创建一个假的迁移:

python manage.py makemigrations --empty yourappname

打开创建的文件,它应该如下所示:

# -*- coding: utf-8 -*-
from django.db import models, migrations

class Migration(migrations.Migration):

dependencies = [
('yourappname', '0001_initial'),
]

operations = [
]

并添加您的代码:

# -*- coding: utf-8 -*-
from django.db import models, migrations

def add_group_permissions():
#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')

class Migration(migrations.Migration):

dependencies = [
('yourappname', '0001_initial'),
]

operations = [
migrations.RunPython(add_group_permissions),
]

最后,运行迁移:

python manage.py migrate

这很好,因为您可以部署到 Heroku 或任何地方,并确保它会被应用,因为这只是另一个迁移。

关于python - Django 1.7 将以编程方式添加组的代码放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25024795/

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