Как я могу выполнить `syncdb --noinput` Django с помощью call_command? - PullRequest
25 голосов
/ 02 сентября 2011
>>> from django.core.management import call_command
>>> call_command('syncdb')

выполняет команду управления syncdb из скрипта Python.Однако я хочу запустить эквивалент

$ python manage.py syncdb --noinput

из оболочки или скрипта Python.Как я могу это сделать?

Следующие строки не работают, не перебивая меня вопросом, хочу ли я создать суперпользователя.

>>> call_command('syncdb', noinput = True) # asks for input
>>> call_command('syncdb', 'noinput') # raises an exception

Я использую Django 1.3.

1 Ответ

42 голосов
/ 03 апреля 2012
call_command('syncdb', interactive = False)

РЕДАКТИРОВАТЬ:

Я нашел ответ в исходном коде.Исходный код для всех команд управления может быть найден в модуле Python management/commands/(command_name).py

Модуль Python, в котором находится команда syncdb: django.core.management.commands.syncdb

Чтобы найти исходный кодКоманда, которую вы можете сделать что-то вроде этого:

(env)$ ./manage.py shell
>>> from django.core.management.commands import syncdb
>>> syncdb.__file__
'/home/user/env/local/lib/python2.7/site-packages/django/core/management/commands/syncdb.pyc'
>>> 

Конечно, проверьте содержимое syncdb.py, а не syncdb.pyc.

Или посмотрите онлайн-источник , скрипт syncdb.py содержит:

    make_option('--noinput', action='store_false', dest='interactive', default=True,
        help='Tells Django to NOT prompt the user for input of any kind.'),

, который говорит нам, что вместо --noinput в командной строке мы должны использовать interactive, если мы хотим автоматизировать команды с помощью call_command функция.

...