33👍
Using manage.py shell
You can use the QuerySet API methods to check if a user exists, and then create it if it doesn’t. Also, it may be easier to put the code in a 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
Using a custom management command
Another, more maintainable option is to add a custom management command for your Django app. Adapting the example from the docs, edit yourapp/management/commands/ensure_adminuser.py
to look like this:
import os
from django.contrib.auth import get_user_model
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = "Creates an admin user non-interactively if it doesn't exist"
def add_arguments(self, parser):
parser.add_argument('--username', help="Admin's username")
parser.add_argument('--email', help="Admin's email")
parser.add_argument('--password', help="Admin's password")
parser.add_argument('--no-input', help="Read options from the environment",
action='store_true')
def handle(self, *args, **options):
User = get_user_model()
if options['no_input']:
options['username'] = os.environ['DJANGO_SUPERUSER_USERNAME']
options['email'] = os.environ['DJANGO_SUPERUSER_EMAIL']
options['password'] = os.environ['DJANGO_SUPERUSER_PASSWORD']
if not User.objects.filter(username=options['username']).exists():
User.objects.create_superuser(username=options['username'],
email=options['email'],
password=options['password'])
Then you can call the new custom command from your Bash script like this:
python manage.py ensure_adminuser --username=admin \
--email=admin@example.com \
--password=pass
3👍
This bash function does the trick, even if you have a custom user model in your app:
create-superuser () {
local username="$1"
local email="$2"
local password="$3"
cat <<EOF | python manage.py shell
from django.contrib.auth import get_user_model
User = get_user_model()
if not User.objects.filter(username="$username").exists():
User.objects.create_superuser("$username", "$email", "$password")
else:
print('User "{}" exists already, not created'.format("$username"))
EOF
}
Credits to Eugene Yarmash for the original idea.
- Django Rest Framework 3.1 breaks pagination.PaginationSerializer
- You cannot add messages without installing django.contrib.messages.middleware.MessageMiddleware
- Django migration relation does not exist
- How do I simulate connection errors and request timeouts in python unit tests
- Changes made to (static) CSS file not reflecting in Django development server
1👍
you can use get_or_create(). If it exists it will do nothing, else it will create one.
You’d have to set the is_staff
and is_superuser
to True
manually
- Is there a way to set the id value of new Django objects to start at a certain value?
- Django: test failing on a view with @login_required
-2👍
For django version greater than 3, create two environment variables named DJANGO_SUPERUSER_USERNAME and DJANGO_SUPERUSER_PASSWORD and optionally DJANGO_SUPERUSER_EMAIL with desired values with commands in bash file. Then run createsuperuser command inside bash. Here is sample bash script:
DJANGO_SUPERUSER_USERNAME=admin
DJANGO_SUPERUSER_PASSWORD=pass
DJANGO_SUPERUSER_EMAIL=admin@example.com
python manage.py createsuperuser --no-input
Original document is here.
- NoReverseMatch on password_Reset_confirm
- How to use ModelMultipleChoiceFilter?
- Where do I import the `DoesNotExist` exception in Django 1.10 from?
- Django select_related for multiple foreign keys
- Django render_to_string() ignores {% csrf_token %}