3

コマンドを使用して Django データベースの空のコピーを作成しようとしています

manage.py syncdb --migrate --database=<db_copy_name>

データベースが sqlite3 データベースの場合は問題なく動作しますが、postgres データベースの場合は失敗します。

postgres を使用すると、通常の Django syncdb によるテーブルの作成はうまくいきますが、移行部分は失敗します。アプリの 1 つには別のアプリのテーブルへの参照があり、もう 1 つのアプリには最初のアプリのテーブルへの参照があります。

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

Postgres 9.1 dbでDjango 1.4、South 0.7.6、psycopg2 2.4.1を実行しています。問題は、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 に答える