在PostgreSQL数据库上使用syncdb --migrate失败。循环依赖

时间:2013-05-23 03:28:05

标签: python django-models django-south syncdb django-postgresql

我正在尝试使用命令

创建我的Django数据库的空副本
manage.py syncdb --migrate --database=<db_copy_name>

如果数据库是sqlite3数据库,它可以正常工作,但对于postgres数据库则失败。

使用postgres,正常的Django syncdb创建表很顺利,但迁移部分失败了。其中一个应用程序引用了另一个应用程序中的表格,另一个应用程序引用了第一个应用程序中的表格,因此无论我迁移应用程序的哪个订单,我都会得到

django.db.utils.DatabaseError: relation "<table_name>" does not exist

我正在运行Django 1.4,South 0.7.6,psycopg2 2.4.1,postgres 9.1 db。 问题与South 0.8,0.8.1和psychopg2 2.5相同。

2 个答案:

答案 0 :(得分:4)

尝试执行延迟导入。将import语句从文件顶部移动到需要它的模型类

所以而不是

from other_app import foo

class Table(models.Model):

    foo = models.ForeignKey(foo)

这样做

class Table(models.Model):
    from other_app import foo

    foo = models.ForeignKey(foo)

答案 1 :(得分:2)

如果您想拥有ForeignField或ManyToManyField等相关字段,请使用'<app_label>.<model_name>'字符串,而不是将模型导入引用。例如,而不是:

from myapp.models import MyModel

class AnotherModel(Model):
    my_model = ForeignField(MyModel)

写:

class AnotherModel(Model):
    my_model = ForeignField('myapp.MyModel')

这可以防止导入模型在类体中的依赖性。如果你想在任何函数中使用其他模型,只需在函数体内而不是模块中导入它。