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 回答