3

我正在尝试使用命令创建我的 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 也存在同样的问题。

4

2 回答 2

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)
于 2013-08-19T19:33:47.667 回答
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')

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

于 2013-08-21T17:40:52.907 回答