如何在不使用manage.py createsuperuser逗号的情况下以编程方式在Docker中为Django创建超级用户?

时间:2019-06-18 06:20:24

标签: python django docker

我是django的新手。我的django应用程序在docker中运行,我需要创建超级用户而不使用我尝试使用此代码initadmin.py(如下所示)创建的createsuperuser命令,但是我无法使用“ python manage.py”在bash文件中运行它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 :(得分:0)

这是create_superuser的定义:

请注意,usernameemailpassword不是关键字参数,调用此方法时不能更改顺序。 您可以实际更改顺序,我刚刚尝试过。

    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