2014-12-22 9 views
15

Ho bisogno di passare un argomento intero a un comando di base in Django. Per esempio se il mio codice eraArgomento del comando di gestione Django

from django.core.management import BaseCommand 

class Command(BaseCommand): 
    def handle(self, *args, **options, number_argument): 
     square = number_argument ** 2 
     print square 

vorrei dire pitone manage.py square_command 4 e farlo tornare 16. C'è un modo per passare un argomento attraverso il terminale al comando voglio correre ?

risposta

28

Aggiungere questo metodo per la classe di comando:

def add_arguments(self, parser): 
    parser.add_argument('my_int_argument', type=int) 

È quindi possibile utilizzare l'opzione nel codice, in questo modo:

def handle(self, *args, **options): 
    my_int_argument = options['my_int_argument'] 

Il vantaggio di fare in questo modo è che il help l'output viene generato automaticamente per manage.py my_command --help

+4

Documenti qui: https://docs.djangoproject.com/en/dev/howto/custom-management-commands/ – User

+1

Dovrebbe essere la risposta accettata. – itsafire

+0

A partire da Django 2.8, questo è il modo per farlo. – neuronet

2

Sì. Il meccanismo per farlo è descritto in here, ma in sostanza, è possibile ottenere l'argomento da args[0].

+5

Trovato una risposta più completa qui: http://stackoverflow.com/questions/10568864/two-arguments-in-django-admin-custom -command? rq = 1 –

+0

Per quelli che vogliono maggiori dettagli, vedere la risposta di acidjunk. – neuronet

+0

@PeterGraham ora dovresti usare il metodo 'add_arguments', che è stato aggiunto nella versione 1.8, quindi non raccomanderei più una risposta più completa. – neuronet

Problemi correlati