2015-05-14 4 views
3

С момента обновления до Django 1.8 в моей команде управления Django появляется странная ошибка.Команда управления Django не может видеть аргументы?

я запускаю его следующим образом:

python manage.py my_command $DB_NAME $DB_USER $DB_PASS 

И тогда я собираю аргументы следующим образом:

class Command(BaseCommand): 

def handle(self, *args, **options): 
    print args 
    db_name = args[0] 
    db_user = args[1] 
    db_pass = args[2] 
    self.conn = psycopg2.connect(database=db_name, user=db_user, 
           password=db_pass) 

Раньше это работало хорошо, но теперь я вижу эту ошибку:

usage: manage.py my_command [-h] [--version] [-v {0,1,2,3}] 
              [--settings SETTINGS] 
              [--pythonpath PYTHONPATH] 
              [--traceback] [--no-color] 
manage.py my_command: error: unrecognized arguments: test test test 

Это даже не доведение до print args.

Если я запускаю его без каких-либо аргументов, то ошибки на линии args[0], неудивительно.

Я использую args здесь неправильно? Или что-то еще происходит?

+0

Это реальный сценарий? В Django уже есть 'dbshell'. Вы изобретаете колесо. Вы можете вызвать командную строку DB с помощью 'python manage.py dbshell'. – cezar

ответ

5

Это изменение в Django 1.8. Как подробно here:

Management commands that only accept positional arguments¶

If you have written a custom management command that only accepts positional arguments and you didn’t specify the args command variable, you might get an error like Error: unrecognized arguments: ..., as variable parsing is now based on argparse which doesn’t implicitly accept positional arguments. You can make your command backwards compatible by simply setting the args class variable. However, if you don’t have to keep compatibility with older Django versions, it’s better to implement the new add_arguments() method as described in Writing custom django-admin commands.

3
def add_arguments(self, parser): 
    parser.add_argument('args', nargs='*') 

Добавьте выше для совместимости, разбивая его было действительно неразумным решением от людей обновляя Джанго.

+0

Это правильный способ указать аргументы. Однако я не согласен с тем, что это было действительно неразумно. Иногда вам приходится порвать с прошлым и двигаться вперед. – cezar