Как я могу выполнить Django 'SyncDB --noinput` с call_command?

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

25
задан Tommaso Barbugli 10 October 2014 в 11:31
поделиться

1 ответ

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.

42
ответ дан 28 November 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: