Как используется опция команды Django Custom Management?

StackOverflow https://stackoverflow.com/questions/4208006

  •  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 Словарь может отсутствовать в этой записи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top