Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django South在自定义管理命令内不工作_Django_Django South - Fatal编程技术网

Django South在自定义管理命令内不工作

Django South在自定义管理命令内不工作,django,django-south,Django,Django South,我有一个自定义的django管理命令,用于初始化应用程序迁移。问题是,south没有在命令中检测到新的迁移 for app in custom_apps: call_command('schemamigration', app, initial=True) call_command('migrate', app, fake=True) 这将创建初始迁移,但不会应用它们 ? You have no migrations for the 'profile' app. You mig

我有一个自定义的django管理命令,用于初始化应用程序迁移。问题是,south没有在命令中检测到新的迁移

for app in custom_apps:
    call_command('schemamigration', app, initial=True)
    call_command('migrate', app, fake=True)
这将创建初始迁移,但不会应用它们

? You have no migrations for the 'profile' app. You might want some.
我尝试使用
convert_to_south
,但它只转换列表中的第一个应用程序,然后为其余应用程序提供此错误

This application has no models; this command is for applications that already have models syncdb'd.
Make some models, and then use ./manage.py schemamigration candidates --initial instead.
如果我手动运行这些命令,它们就会工作


无法确定发生了什么。

我认为您缺少migrate命令的一个参数。 )一个小例子,为假转换您的应用程序。他们的命令如下所示:

for app in custom_apps:
    call_command('schemamigration', app, initial=True)
    call_command('migrate', 0001, fake=True)
./manage.py迁移myapp 0001--假

因此,您可以尝试以下方法:

for app in custom_apps:
    call_command('schemamigration', app, initial=True)
    call_command('migrate', 0001, fake=True)
如果您想一次转换所有应用程序,可以在循环之外使用此代码

call_command('migrate', 0001, fake=True, all=True)
通常情况下,最后一个命令应该为所有应用程序应用初始迁移


祝你好运。

在运行管理命令之前是否运行了syncdb?另外,请参考此SO问题:是的,我以前运行过
syncdb
。这不是问题所在。问题是它不能从django shell或管理命令中工作。使用两个不同的django项目进行了测试您是否尝试运行了两次
call_命令('schemamigration',app,initial=True)
?有时我在运行schemamigration应用程序--init时会遇到同样的错误,然后我重新运行该命令,它就工作了。我也有同样的问题,你找到解决方案了吗?不需要通过0001。如果不提供迁移号,south将迁移到最后一次可用的迁移,因此这不是问题所在。不管怎样,很多第三方应用程序都有不止一次迁移,所以当假迁移时,通过0001不是一个好主意。如果你的应用程序已经进行了迁移,那么使用initial=True调用schemamigration就有点不切实际了,不是吗?因为afaik,该命令仅用于第一次迁移…我的应用程序没有迁移,只是举了一个例子,说明为什么不总是需要通过0001,或者在应用fake时,通过0001是最好的选择。