如果不以非交互方式存在,那么如何创建Django超级用户?

pla*_*etp 5 python django bash django-users

我想通过Bash脚本自动创建Django用户.我发现这个片段几乎适合我的需要:

echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'pass')" |\
    python manage.py shell
Run Code Online (Sandbox Code Playgroud)

如果用户已经存在,我如何修改它以使它成为一个nop?

Eug*_*ash 9

使用一些QuerySet API方法和heredoc来提高可读性:

cat <<EOF | python manage.py shell
from django.contrib.auth import get_user_model

User = get_user_model()  # get the currently active user model,

User.objects.filter(username='admin').exists() or \
    User.objects.create_superuser('admin', 'admin@example.com', 'pass')
EOF
Run Code Online (Sandbox Code Playgroud)

请注意,您应该使用manage.py shell辅助函数来创建超级用户而不是通用yourapp/management/commands/ensure_adminuser.py方法,因为它需要正确设置密码.

PS作为@dragonfast在评论中提到,您可以python manage.py ensure_adminuser --username=admin --email=admin@example.com --password=pass用来获取对当前活动用户模型的引用,这比manage.py shell直接引用更灵活.