Due argomenti in django-admin comando personalizzato

Ho un di lavoro django-admin comando personalizzato che io uso per popolare il database con nuove informazioni. Di nuovo, tutto funziona.

Tuttavia, ora ho cambiato i miei modelli e funzione leggermente accetta due argomenti, come una tupla – nome e cognome, invece di “nome”.

Precedente codice riportato di seguito – lavoro. Eseguire utilizzando “manage.py xyz nome1 nome2 nome3, ecc… (spazio tra i diversi args)

from django.core.management.base import BaseCommand, CommandError
from detail.models import ABC
from detail.parser import DEF

class Command(BaseCommand):
    args = '<name...>'
    help = 'Populates the ABC class database'

    def handle(self, *args, **options):
        for symbol in args:

            try:
                info = DEF(name)

È possibile passare su due argomenti da django-admin comando personalizzato, in cui il secondo argomento è facoltativo –> ovvero (primo, ultimo=Nessuno)?

Pseudocodice al di sotto di quello che mi piacerebbe eseguire utilizzando… “manage.py xyz (first1, last1) (first2, last2) <– o qualche variazione di questo

Ho già cambiato la funzione DEF accettare questo in modo appropriato come funzione autonoma. Sto solo non si è sicuri come posso ottenere il django-admin comando a lavoro.



One Reply
  1. 13

    È del tutto possibile, anche se django.core.management non fornisce uno strumento specifico per farlo. È possibile analizzare gli argomenti passati attraverso l’ args parola chiave argomento. Dovrete venire con una sintassi per farlo (definire la sintassi in help attributo del comando probabilmente sarebbe una buona idea).

    Supponendo che la sintassi è firstname.lastname, o semplicemente firstname nel caso in cui l’ultimo nome viene omesso, è possibile fare qualcosa di simile:

    def handle(self, *args, **options):
        for arg in args:
            try:
                first_name, last_name = arg.split('.')
            except ValueError:
                first_name, last_name = arg, None
    
            info = DEF(first_name, last_name)

    E gli utenti del comando può passare in argomenti come:

    $ python manage.py yourcommand -v=3 john.doe bill patrick.bateman
    • GRAZIE! Che ha funzionato bene. Mi è stato originariamente sperando di avere due distinti argomenti, ma funziona lo stesso.
    • che cosa si farà ?
    • Questa risposta è obsoleto, django ora ha un add_arguments metodo built-in, che è stato aggiunto in v1.8. Vedi: docs.djangoproject.com/en/2.0/howto/custom-management-commands

Lascia un commento