如何用call_command执行Django的`syncdb --noinput`?

时间:2011-09-02 07:56:50

标签: django django-admin syncdb

>>> from django.core.management import call_command
>>> call_command('syncdb')

从python脚本中执行syncdb管理命令。但是,我想运行等效的

$ python manage.py syncdb --noinput

从python shell或脚本中。我怎么能这样做?

以下几行无法解决我是否要创建超级用户的问题。

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

我使用Django 1.3。

1 个答案:

答案 0 :(得分:42)

call_command('syncdb', interactive = False)

编辑:

我在源代码中找到了答案。所有管理命令的源代码都可以在名为management/commands/(command_name).py

的python模块中找到

syncdb命令所在的python模块是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。

或者查看online sourcesyncdb.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