Как используется опция команды Django Custom Management?
-
25-09-2019 - |
Вопрос
Django DOC скажет мне, как добавить вариант для моей команды управления Django Custom, через пример:
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
вариант? На Times 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
Словарь может отсутствовать в этой записи.