>>> 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.
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
.