2012-05-13 4 views
8

У меня есть рабочая пользовательская команда django-admin, которую я использую для заполнения моей базы данных новой информацией. Опять же, все работает.Два аргумента в пользовательской команде django-admin

Тем не менее, теперь я изменил свои модели и немного поработал, чтобы принять два аргумента в качестве кортежа: имя и, а не просто «имя».

Предыдущий код ниже - рабочий. Запуск с помощью «manage.py хуга name1 name2 name3 ... и т.д. (пространство между различной арг)

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) 

Можно ли передать два аргумента из Джанго-администратора пользовательской команды, где второй аргумент необязательно -> то есть (первый, последний = нет)?

Псевдокод ниже того, что я хотел бы использовать, используя ... "manage.py xyz (first1, last1) (first2, last2) < - или какой-либо вариации этого

Я уже изменил функцию DEF, чтобы принять ее как отдельную функцию. Я просто не знаю, как я могу заставить команду django-admin работать сейчас.

ответ

13

Это возможно, хотя django.core.management не содержит специального инструмента для этого. Вы можете проанализировать аргументы, переданные через аргумент ключевого слова args. Вам придется придумать синтаксис для этого (определение синтаксиса в атрибуте help команды, вероятно, будет хорошей идеей).

Предполагая, что синтаксис firstname.lastname, или просто firstname в том случае, фамилия опущена, вы можете сделать что-то вроде:

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) 

И пользователи команды могут передавать данные через аргументы вроде так:

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

СПАСИБО! Это сработало хорошо. Сначала я надеялся иметь два отдельных аргумента, но это работает одинаково. – snakesNbronies

+3

@modocache -v = 3? что он будет делать? – GThamizh

+2

Этот ответ устарел, django теперь имеет встроенный метод 'add_arguments', который был добавлен в v1.8. См. Https://docs.djangoproject.com/en/2.0/howto/custom-management-commands/ – neuronet

Смежные вопросы