Django doc告诉我如何通过一个例子为我的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会让事情变得简单: - (
答案 0 :(得分:19)
你可以这样做:
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
所做的那样)
答案 1 :(得分:7)
关于定义命令(键名,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
字典可能缺少此条目,则没有理由不使用两个默认值。