Подтвердить что ты не робот

Как использовать параметр пользовательского управления Django?

В документе 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 облегчает работу: - (

4b9b3361

Ответ 1

Вы можете сделать это следующим образом:

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)

Ответ 2

Небольшое предложение об определении команд (имя ключа, 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 может отсутствовать в этой записи.