注意:自 1.7 版起,syncdb 命令为deprecated。使用migrateinstead。
Django 1.7 还引入了AppConfig 作为自定义应用程序初始化过程的手段。
因此,从 Django 1.7 开始,实现您想要的最简单的方法是使用 AppConfig 的子类。
假设您碰巧有自己的 example_app 添加到您的 INSTALLED_APPS 中,并且您想创建和 admin 用户使用 admin 密码从头开始运行./manage.py migrate。我还假设仅在 dev 环境中需要自动创建管理员用户 - 在 production 中不需要。
将以下代码添加到example_app/apps.py
# example_app/apps.py
from django.apps import AppConfig
from django.conf import settings
from django.db.models.signals import post_migrate
from django.contrib.auth.apps import AuthConfig
USERNAME = "admin"
PASSWORD = "admin"
def create_test_user(sender, **kwargs):
if not settings.DEBUG:
return
if not isinstance(sender, AuthConfig):
return
from django.contrib.auth.models import User
manager = User.objects
try:
manager.get(username=USERNAME)
except User.DoesNotExist:
manager.create_superuser(USERNAME, 'x@x.com', PASSWORD)
class ExampleAppConfig(AppConfig):
name = __package__
def ready(self):
post_migrate.connect(create_test_user)
另外在appsexample_app/__init__.py内的app配置中添加如下引用:
# example_app/__init__.py
default_app_config = 'example_app.apps.ExampleAppConfig'
其中 default_app_config 是 AppConfig 子类的字符串 Python 路径,如提到的 here。