在South存在的情况下创建djcelery表

时间:2011-12-12 07:07:37

标签: python django django-south django-celery

根据django-celery的documentation,如果我有南方我应该打电话

python manage.py migrate djcelery

但是,它所做的只是创建一些迁移文件:

Running migrations for djcelery:
 - Migrating forwards to 0001_initial
 > djcelery:0001_initial
 - Loading initial data for djcelery.
No fixtures found.

它不会像它应该做的那样创建以下表。从INSTALLED_APPS中删除南后我执行了syncdb:

Creating table djcelery_intervalschedule
Creating table djcelery_crontabschedule
Creating table djcelery_periodictasks
Creating table djcelery_periodictask
Creating table djcelery_workerstate
Creating table djcelery_taskstate

但是,当存在south时,不会使用

创建这些表
python manage.py syncdb

奇怪的是,不知怎的,昨天我能够用syncdb获取这些表,但老实说我不知道​​我做了什么让它工作并且无法重现它。这种情况发生在Windows 7和Ubuntu 11.10

我想知道我做错了。任何输入将不胜感激!

3 个答案:

答案 0 :(得分:3)

我们遇到了同样的问题,并且能够通过--all使用syncdb标记来安装使用South创建的所有表:

python manage.py syncdb --all

答案 1 :(得分:0)

如果表已经存在,似乎djcelery无声地失败:请参阅https://github.com/ask/django-celery/blob/master/djcelery/migrations/0001_initial.py

您可以尝试修补迁移并打印异常消息。这可能有所帮助。

编辑:您可以尝试使用以下内容编辑0001_initial.py中的ignore_exists。 (好吧不是很干净,但可能有助于理解)

def ignore_exists(fun, *args, **kwargs):
    try:
        fun(*args, **kwargs)
    except DatabaseError, exc:
        print "##", exc #This is the patch
        if "exists" in str(exc):
            return False
        raise
    return True

答案 2 :(得分:-1)

只需运行此命令,我最近使用它并创建了所有djcelery表。

python manage.py migrate