如何一个使用Django自定义管理命令选项?
-
25-09-2019 - |
题
在Django的文档告诉我如何将选项添加到我的Django的自定义管理命令,通过一个例子:
from optparse import make_option
class Command(BaseCommand):
option_list = BaseCommand.option_list + (
make_option('--delete',
action='store_true',
dest='delete',
default=False,
help='Delete poll instead of closing it'),
)
然后,文档只是停止。如何将一个写handle
方法这个类来检查用户是否已提供--delete
的选择吗?在倍的Django使得容易为难: - (
解决方案
您可以做这样的:
from optparse import make_option
class Command(BaseCommand):
option_list = BaseCommand.option_list + (
make_option('--del',
action='store_true',
help='Delete poll'),
make_option('--close',
action='store_true',
help='Close poll'),
)
def handle(self, close, *args, **kwargs):
del_ = kwargs.get('del')
请注意,在一些Python的关键字被保留,所以你可以处理使用**kwargs
那些。否则,你可以使用正常的参数(像我close
一样)
其他提示
有关定义的命令(键名,dest
)和处理的默认值(在make_option
并在命令)一个小建议:
class Command(BaseCommand):
option_list = BaseCommand.option_list + (
make_option('--del',
action='store_true',
help='Delete all polls.',
dest='your_name_for_delete',
default=False),
make_option('--close',
action='store_true',
help='Close all polls.'),
)
def handle(self, close, *args, **options):
if options.get('your_name_for_delete'):
Poll.objects.delete()
if options.get('close', False):
Poll.objects.update(closed=True)
在Django的代码,你会发现“关键字参数”(**kwargs
)通常命名为**options
,这是更提示(我坚持这个命名约定)。
默认值可以是在make_option指定,或者通过dict.get
方法,
这允许一个默认值。
有的两个默认值,应该将Command.handle
方法人工呼叫,其中**options
字典可能会错过这个条目没有理由不u使用。
不隶属于 StackOverflow