在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使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top