2012-05-13 14 views
8

Mam niestandardowe polecenie django-admin, którego używam do zapełniania mojej bazy danych nowymi informacjami. Znowu wszystko działa.Dwa argumenty w komendzie niestandardowej django-admin

Jednak teraz zmieniłem moje modele i działają nieznacznie, aby zaakceptować dwa argumenty jako krotkę - imię i nazwisko, zamiast tylko "nazwa".

Poprzedni kod poniżej - działa. Uruchom za pomocą „manage.py xyz nazwa1 nazwa2 NAME3 ... itd. (Przestrzeń pomiędzy różnymi 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) 

Czy to możliwe, aby przejść na dwóch argumentach z poleceniem django-admin niestandardowych gdzie drugi argument jest opcjonalnie -> ie (pierwszy, ostatni = brak)?

Pseudokod poniżej tego, co chciałbym uruchomić przy użyciu ... "manage.py xyz (first1, last1) (first2, last2) < - lub pewna wersja tego

zmieniłem już funkcję DEF, aby zaakceptować to odpowiednio jako samodzielną funkcję. Po prostu nie jestem pewien, jak mogę teraz uruchomić komendę django-admin.

Odpowiedz

13

Jest to całkowicie możliwe, chociaż django.core.management nie zapewnia konkretnego narzędzia do tego. Można analizować argumenty przekazywane za pomocą argumentu słowa kluczowego args. Będziesz musiał wymyślić składnię do tego celu (zdefiniowanie składni w atrybucie help byłoby dobrym pomysłem).

Zakładając składnia jest firstname.lastname, lub po prostu firstname w przypadku, gdy nazwisko jest pominięty, można zrobić coś takiego:

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) 

i użytkownicy polecenia może przejść w argumenty tak:

$ python manage.py yourcommand -v=3 john.doe bill patrick.bateman 
+0

DZIĘKI! To działało dobrze. Początkowo miałem nadzieję, że będą mieć dwa oddzielne argumenty, ale to działa tak samo. – snakesNbronies

+3

@modocache -v = 3? co on zrobi? – GThamizh

+2

Ta odpowiedź jest już nieaktualna, django ma teraz wbudowaną metodę 'add_arguments', która została dodana w wersji 1.8. Zobacz: https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/ – neuronet

Powiązane problemy