我想在每个项目的生命中创建两个组。所以,我读到了AppConfig
我创建了core.appconfig.py
:
from django.apps import AppConfig
from django.contrib.auth.models import Group
class RolesConfig(AppConfig):
name = 'roles_config'
verbose_name = 'Roles configuration'
def create_roles(self):
driver = Group.objects.create(name='driver')
manager = Group.objects.create(name='manager')
driver.save()
manager.save()
in settings.py
:default_app_config = 'core.appconfig.RolesConfig'
但是当我运行服务器并转到管理页面时,没有组。为什么?何时AppConfig
被召唤?
答案 0 :(得分:4)
考虑使用data migration:
servers {
listen 80;
server_name localhost;
location /app1 {
rewrite /app1(.*) /$1 break;
proxy_pass 127.0.0.1:3000
}
location /app2 {
rewrite /app2(.*) /$1 break;
proxy_pass 127.0.0.1:3001
}
client_max_body_size 4G;
keepalive_timeout 10;
}
创建一个空的迁移文件。manage.py makemigrations <app_name> --empty
def create_roles(apps, schema_editor):
Group = apps.get_model('auth', 'Group')
driver = Group.objects.create(name='driver')
manager = Group.objects.create(name='manager')
操作:RunPython
自动加载数据夹具deprecated支持数据迁移。
答案 1 :(得分:3)
我认为@Leistungsabfall的答案是正确的,除此之外:不要这样做。 App配置不是为此目的而构建的,而是应该创建灯具:https://docs.djangoproject.com/en/1.8/howto/initial-data/。
每次运行应用程序时都会运行App配置,因此它不会真正起作用。
答案 2 :(得分:1)
这里有几个问题:
确保appconfig.py
的路径为myapp/appconfig.py
。
确保name
是您的Django应用程序名称(例如myapp
)。
将create_roles(self)
重命名为ready(self)
。
在myapp/__init__.py
(创建此文件,如果它不存在)中添加以下行:
default_app_config = 'myapp.appconfig.RolesConfig'
删除driver.save()
和manager.save()
,它们是多余的,因为create()
已经将对象保存在数据库中。
(将myapp
替换为您的Django应用程序名称。)