Pergunta

O documento Django Diga -me como adicionar uma opção ao meu comando de gerenciamento personalizado do Django, por exemplo:

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'),
    )

Então os documentos simplesmente param. Como se escreveria o handle método para esta classe para verificar se o usuário forneceu um --delete opção? Às vezes Django dificulta as coisas fáceis :-(

Foi útil?

Solução

Você pode fazer assim:

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')

Observe que algumas palavras -chave no python são reservadas para que você possa lidar com aqueles que usam **kwargs. Caso contrário, você pode usar argumentos normais (como eu fiz com close)

Outras dicas

Uma pequena sugestão sobre como definir os comandos (nome da chave, dest) e lidar com valores padrão (em make_option e no comando):

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)

No código Django, você encontrará "argumentos de palavras -chave" (**kwargs) frequentemente nomeado como **options, o que é mais sugestivo (eu me apego a essa convenção de nomenclatura).

O valor padrão pode ser especificado em make_option ou através do dict.get método, que permite um valor padrão.

Não há razão para você não usar Ambas Padrões, deve seu Command.handle método ser chamado manualmente, onde o **options O dicionário pode estar perdendo esta entrada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top