Как использовать параметр пользовательского управления 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 облегчает работу: - (
Ответы
Ответ 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
может отсутствовать в этой записи.