我正在尝试使用命令
创建我的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相同。
答案 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')
这可以防止导入模型在类体中的依赖性。如果你想在任何函数中使用其他模型,只需在函数体内而不是模块中导入它。