在django做一次

时间:2015-05-26 16:10:08

标签: django django-views

我想在每个项目的生命中创建两个组。所以,我读到了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.pydefault_app_config = 'core.appconfig.RolesConfig' 但是当我运行服务器并转到管理页面时,没有组。为什么?何时AppConfig被召唤?

3 个答案:

答案 0 :(得分:4)

考虑使用data migration

  1. 使用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; } 创建一个空的迁移文件。
  2. 创建一个将默认值添加到数据库的函数。
  3. manage.py makemigrations <app_name> --empty
    1. 为您的迁移添加def create_roles(apps, schema_editor): Group = apps.get_model('auth', 'Group') driver = Group.objects.create(name='driver') manager = Group.objects.create(name='manager')操作:
    2. RunPython

      自动加载数据夹具deprecated支持数据迁移。

答案 1 :(得分:3)

我认为@Leistungsabfall的答案是正确的,除此之外:不要这样做。 App配置不是为此目的而构建的,而是应该创建灯具:https://docs.djangoproject.com/en/1.8/howto/initial-data/

每次运行应用程序时都会运行App配置,因此它不会真正起作用。

答案 2 :(得分:1)

这里有几个问题:

  1. 确保appconfig.py的路径为myapp/appconfig.py

  2. 确保name是您的Django应用程序名称(例如myapp)。

  3. create_roles(self)重命名为ready(self)

  4. myapp/__init__.py(创建此文件,如果它不存在)中添加以下行:

    default_app_config = 'myapp.appconfig.RolesConfig'
    
  5. 删除driver.save()manager.save(),它们是多余的,因为create()已经将对象保存在数据库中。

  6. (将myapp替换为您的Django应用程序名称。)