gpt4 book ai didi

python - 在 Django 中创建自定义命令

转载 作者:太空狗 更新时间:2023-10-30 02:53:11 29 4
gpt4 key购买 nike

我有以下用户模型,

class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True, max_length=255)
mobile = PhoneNumberField(null=True)
username = models.CharField(null=False, unique=True, max_length=255)
full_name = models.CharField(max_length=255, blank=True, null=True)
is_bot = models.BooleanField(default=False)

我想创建一个自定义命令,它可以像 createsuperuser 一样工作并创建一个机器人。

我已经在相关应用程序中创建了一个管理包,并在其中添加了一个命令包和一个文件 createbot.py。

这是我在 createbot.py 中的代码

class Command(BaseCommand):
def handle(self, email, username=None, password=None):
user = User.objects.create(email,
username=username,

password=password,
is_staff=True,
is_superuser=True,
is_active=True,
is_bot=True
)
self.stdout.write(self.style.SUCCESS('Successfully create user bot with id: {}, email: {}'.format(user.id, user.email)))

我希望它能像 createsuper user 一样工作,提示我输入电子邮件、姓名和作品。但是当我运行它时,我得到以下信息,

TypeError: handle() got an unexpected keyword argument 'verbosity'

我怎样才能让它工作?

最佳答案

Like 在创建 custom commands 的文档中指定:

In addition to being able to add custom command line options, all management commands can accept some default options such as --verbosity and --traceback.

所以这意味着 handle(..) 函数会使用这些参数调用,即使您对这些参数不感兴趣。

然而,您可以通过使用 keyword arguments 轻松捕捉并忽略它们:

class Command(BaseCommand):

def handle(self, email, username=None, password=None<b>, **other</b>):
# ...
# perform actions
pass

这里的 other 是一个将字符串映射到值的字典:调用函数时使用的参数,但在函数的签名中没有明确提及。

该文档还提到了如何在句柄中指定您要使用的参数,以便在用户请求如何使用自定义命令时生成帮助文本。例如,您可以这样写:

class Command(BaseCommand):

<b>def add_arguments(self, parser):
# Positional arguments
parser.add_argument('email', required=True)

# Named (optional) arguments
parser.add_argument(
'--username',
help='The username for the user',
)
parser.add_argument(
'--password',
help='The password for the user',
)</b>

def handle(self, email, username=None, password=None, **other):
# ...
# perform actions
pass

请注意,密码在 Django 中是散列的,因此您应该使用 create_user(..)

关于python - 在 Django 中创建自定义命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50536967/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com