1

いくつかの男のコードに出くわしました

彼はこのようなモデルを持っています

class Country(models.Model):
  name = models.CharField(max_length=100)

class TourDate(models.Model):
  artist = models.ForeignKey("Artist")
  date = models.DateField()
  country = models.ForeignKey("Country")

そして、このようにクエリしています

    ireland = Country.objects.get(name="Ireland")
  artists = Artist.objects.all().extra(select = {
      "tourdate_count" : """
      SELECT COUNT(*)
      FROM sandbox_tourdate
          JOIN sandbox_country on sandbox_tourdate.country_id = sandbox_country.id
      WHERE sandbox_tourdate.artist_id = sandbox_artist.id
      AND sandbox_tourdate.country_id = %d """ % ireland.pk,
  }).order_by("-tourdate_count",)

私の質問は、彼が sandbox_tourdate のようなアンダースコアを持っているのに、それがモデル フィールドにない理由です。それはある種の疑似フィールドのように自動的に作成されますか?

4

1 に答える 1

1

sandbox_tourdateフィールドの名前ではなく、テーブルの名前です。Django の命名規則はappname_modelname、テーブル名として使用することですが、これはオーバーライドできます。この場合、アプリは「サンドボックス」と呼ばれていると思います。

その人が生のクエリを使用した理由はよくわかりませんが、これは Django の ORM 構文で非常に簡単に表現できます。

于 2013-07-18T15:10:05.053 に答える