1

わかりました、models.py ファイルでこれを作成しました:

class PL(models.Model):
  created = models.DateTimeField(default=timezone.now)
  owner = models.ForeignKey(User, related_name='PL')
  text = models.CharField(max_length=2000, blank=True)
  rating = models.IntegerField(default=0)
  pal = models.ManyToManyField(PS, blank=True, null=True)
  class Meta:
    verbose_name = "PL text"
  def __unicode__(self):
    return self.user

class PS(models.Model):
  Original = models.ForeignKey(PL, related_name='OPL', blank=True)
  rating = models.IntegerField(default=0)
  word = models.CharField(max_length=50, blank=True)

  def __unicode__(self):
    return "Word: %s" % (self.word)

しかし、私は取得し続けます: NameError: name 'PS' is not defined

なぜこうなった?

4

2 に答える 2

10

mgilson が言うように、上から下に移動します。しかし、Djangoにはこれを行うことでそれを克服する方法があります -

pal = models.ManyToManyField('PS', blank=True, null=True)

Django doc では、ForeignKey の下で説明しています。

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

詳しくはこちらをご覧ください

于 2013-02-18T14:44:47.473 に答える
1

クラス PL では:

pal = models.ManyToManyField(PS, blank=True, null=True)

PS を使いたくてたまりませんが、Python スクリプトが上から下に読み込まれるため、まだ作成されていません。通常、解決策はPSbeforeを定義することですが、次のものにも依存するPLため、うまくいきません。PSPL

Original = models.ForeignKey(PL, related_name='OPL', blank=True)

あなたは鶏卵コーナーに自分自身をバックアップしました. ニワトリが必要ですが、卵がなければ手に入れることはできませんが、ニワトリがなければ卵を手に入れることはできませんが...

最終的には、2 つのクラスが互いに依存しないようにリファクタリングを行う必要があります。

メソッド内では問題が発生しないことに注意してください。その場合、メソッド クラスは実行されるまで検索されないためです。ただし、クラスの名前空間はクラスの作成時に実行されるため、NameError.

于 2013-02-18T14:41:58.000 に答える