1

そのため、django の inspectdb 関数を使用してレガシー データベースをインポートすると、「モデルの順序を並べ替える」を手動でクリーンアップする必要があることが示されます。django Web サイトのドキュメントには、「特に、他のモデルを参照するモデルが適切に順序付けられるように、モデルの順序を再配置する必要があります。」と記載されています。

これは正確にはどういう意味ですか?モデル A がモデル B を参照する場合、モデル B はファイル内でモデル A の前に表示されますか?

4

1 に答える 1

3

django Web サイトのドキュメントには、「特に、他のモデルを参照するモデルが適切に順序付けられるように、モデルの順序を再配置する必要があります」と記載されています。

これは正確にはどういう意味ですか?

一般に Python では、任意の名前を参照するには、最初に定義する必要があります。そうして初めてマッピングされるからです。したがって、これはエラーになります。

print(hello)
hello = 'world'

同様に、 ではmodels.py、何らかの関係で別のモデル クラスを参照している場合。クラスが参照される前にクラスが宣言されていることを確認する必要があります。または、クラス名を引用する必要があります。インスペクションでは作成されるモデルの順序を保証できないため、警告が表示されます。このシナリオを防ぐように設計されており、エラーが発生します。

class A(models.Model):
   foo = models.ForeignKey(B)

class B(models.Model):
   name = models.CharField(max_length=200)

Bそれを修正するには、前に宣言することができますA:

class B(models.Model):
    name = models.CharField(max_length=200)

class A(models.Model):
    foo = models.ForeignKey(B)

または、名前の代わりに文字列を使用します。

class A(models.Model):
   foo = models.ForeignKey('B')

class B(models.Model):
   name = models.CharField(max_length=200)
于 2013-08-06T07:04:23.800 に答える