Python 如何在docker中以编程方式为django创建超级用户,而不使用manage.py createsuperuser命令?
我是django的新手。我的django应用程序在docker中运行,我需要在不使用createsuperuser命令的情况下创建一个超级用户。我尝试使用此代码initadmin.py(如下所示),但无法使用“python manage.py initadmin”在bash文件中运行它。它不起作用了 initadmin.py:Python 如何在docker中以编程方式为django创建超级用户,而不使用manage.py createsuperuser命令?,python,django,docker,Python,Django,Docker,我是django的新手。我的django应用程序在docker中运行,我需要在不使用createsuperuser命令的情况下创建一个超级用户。我尝试使用此代码initadmin.py(如下所示),但无法使用“python manage.py initadmin”在bash文件中运行它。它不起作用了 initadmin.py: from django.contrib.auth.models import User from django.core.management.base import B
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')
谁能告诉我我做错了什么?有没有更好的方法以编程方式创建超级用户?这是
create\u superuser
的定义:
请注意,用户名
,电子邮件
,密码
不是关键字参数,调用此方法时不能更改顺序。
你可以改变顺序实际上,我刚试过
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\u superuser
将为您设置它们。
您也不需要调用save
。
在您的案例中,文件结构应该是这样的
PROJECT_ROOT/
YOUR_APP/
__init__.py
models.py
management/
commands/
initadmin.py
tests.py
views.py
这是
create\u superuser
的定义:
请注意,用户名
,电子邮件
,密码
不是关键字参数,调用此方法时不能更改顺序。
你可以改变顺序实际上,我刚试过
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\u superuser
将为您设置它们。
您也不需要调用save
。
在您的案例中,文件结构应该是这样的
PROJECT_ROOT/
YOUR_APP/
__init__.py
models.py
management/
commands/
initadmin.py
tests.py
views.py
能否添加尝试运行管理命令时收到的错误消息?能否添加尝试运行管理命令时收到的错误消息?谢谢!我将更改顺序,但您能否告诉我是否可以使用python manage.py initadmin运行它。。。。如果文件夹initadmin包含init.py和initadmin.py,并且该文件夹与manage.py处于同一级别!您需要遵循这里描述的结构:确保您在正确的位置拥有所有的空白的.y.iTyth.P.file。我添加了示例,您可以共享您的<代码>设置。ADMIDS和您当前的代码> IITAdmin。Py < /Cord>文件?谢谢!我将更改顺序,但您能否告诉我是否可以使用python manage.py initadmin运行它。。。。如果文件夹initadmin包含init.py和initadmin.py,并且该文件夹与manage.py处于同一级别!您需要遵循此处描述的结构:确保您在正确的位置拥有所有的空白y.iITy.y.py文件。我添加了示例,您可以共享您的<代码>设置。ADMIDS和您当前的代码> IITAdmin?Py < /Cord>文件?