data - ¿Cómo puedo realizar el `syncdb--noinput` de Django con call_command?
export data django (1)
>>> from django.core.management import call_command
>>> call_command(''syncdb'')
ejecuta el comando de administración syncdb desde un script de python. Sin embargo, quiero correr el equivalente de
$ python manage.py syncdb --noinput
desde dentro de un shell o script en python. ¿Cómo puedo hacer eso?
Las siguientes líneas no funcionan sin que me interrumpa con la pregunta de si quiero crear un superusuario.
>>> call_command(''syncdb'', noinput = True) # asks for input
>>> call_command(''syncdb'', ''noinput'') # raises an exception
Yo uso Django 1.3.
call_command(''syncdb'', interactive = False)
EDITAR:
Encontré la respuesta en el código fuente. El código fuente de todos los comandos de administración se puede encontrar en un módulo de python llamado management/commands/(command_name).py
El módulo de python donde reside el comando django.core.management.commands.syncdb
es django.core.management.commands.syncdb
Para encontrar el código fuente del comando puedes hacer algo como esto:
(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''
>>>
Por supuesto, verifique el contenido de syncdb.py, y no syncdb.pyc.
O mirando la fuente en línea , el script syncdb.py
contiene:
make_option(''--noinput'', action=''store_false'', dest=''interactive'', default=True,
help=''Tells Django to NOT prompt the user for input of any kind.''),
eso nos dice que, en lugar de --noinput
en la línea de comandos, deberíamos usar la función interactive
si queremos automatizar comandos con la función call_command
.