3

Django docsエントリではForeignKey、次のように述べています。

まだ定義されていないモデルに関係を作成する必要がある場合は、モデル オブジェクト自体ではなく、モデルの名前を使用できます。

例: 名前

class Car(models.Model):
    manufacturer = models.ForeignKey('Manufacturer')

またはオブジェクト

class Car(models.Model):
    manufacturer = models.ForeignKey(Manufacturer)

これら 2 つのバリアントの違いは何ですか?

4

2 に答える 2

2

あなたがこれを持っている場合models.py

class Car(models.Model):
    name = models.CharField(max_length=200)
    manufacturer = models.ForeignKey(Manufacturer)

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

クラスは のManufacturerに定義されているため、インタープリターがこの行:に到達すると、名前空間で名前のManufacturerを見つけることができず、エラーが発生します。 Carmodels.ForeignKey(Manufacturer)

これを回避するには、通常、定義の順序を変更します。

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

class Car(models.Model):
    name = models.CharField(max_length=200)
    manufacturer = models.ForeignKey(Manufacturer)

ここで、インタープリターが製造元の外部キー定義に到達すると、クラスは既に定義されています (Carクラスの前に宣言されているため)。これを行う別の方法。モデルが宣言されている順序をシャッフルしたくない場合は、参照するモデルの名前である文字列を使用することです。名前ではなく文字列であるため、Python はエラーを発生させません。

于 2013-08-30T20:08:33.343 に答える