Как создать суперпользователя для django в Docker программно, не используя запятую manage.py createuperuser? - PullRequest
0 голосов
/ 18 июня 2019

Я новичок в Джанго. У меня запущено приложение django в Docker, мне нужно создать суперпользователя без использования команды createuperuser. Я попытался использовать этот код initadmin.py (показан ниже), но я не могу запустить его в файле bash, используя "python manage.py initadmin». Это не работает!

initadmin.py:

from django.contrib.auth.models import User
from django.core.management.base import BaseCommand
from django.conf import settings


class Command(BaseCommand):

    def handle(self, *args, **options):
        if User.objects.count() == 0:
            for user in settings.ADMINS:
                username = 'admin'
                email = 'admin.com'
                password = 'admin'
                print('Creating account for %s (%s)' % (username, email))
                admin = User.objects.create_superuser(email=email, username=username, password=password)
                admin.is_active = True
                admin.is_admin = True
                admin.save()
        else:
            print('Admin accounts can only be initialized if no Accounts exist')

Может кто-нибудь сказать мне, что я делаю не так? Есть ли лучший способ создать суперпользователя программно?

1 Ответ

0 голосов
/ 18 июня 2019

Это определение create_superuser:

обратите внимание, что username, email, password не являются аргументами ключевых слов, вы не можете изменить порядок при вызове этого метода. Вы можете изменить порядок на самом деле, я только что попробовал.

    def create_superuser(self, username, email, password, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)

        if extra_fields.get('is_staff') is not True:
            raise ValueError('Superuser must have is_staff=True.')
        if extra_fields.get('is_superuser') is not True:
            raise ValueError('Superuser must have is_superuser=True.')

        return self._create_user(username, email, password, **extra_fields)

Просто сделайте это в своем коде:

User.objects.create_superuser(username, email, password)

is_admin не является атрибутом модели пользователя по умолчанию, вы имеете в виду is_staff?

Независимо от того, вам не нужно устанавливать их, поскольку create_superuser установит их для вас. Вам также не нужно звонить save.


структура файла должна быть такой в ​​вашем случае
PROJECT_ROOT/
    YOUR_APP/
        __init__.py
        models.py
        management/
            commands/
                initadmin.py
        tests.py
        views.py
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...