Xtal
Xtal

Reputation: 305

Django annotate code

Just stumbled upon some guy code

He have models like this

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")

And is querying like this

    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",)

My question is why He have underscores like sandbox_tourdate but it isn't in model field Is that created automatically like some sort of pseudo-field?

Upvotes: 1

Views: 50

Answers (1)

Daniel Roseman
Daniel Roseman

Reputation: 599580

sandbox_tourdate isn't the name of the field, it's the name of the table. Django's naming convention is to use appname_modelname as the table name, although this can be overridden. In this case, I guess the app is called 'sandbox'.

I don't really know why that person has used a raw query though, that is quite easily expressed in Django's ORM syntax.

Upvotes: 1

Related Questions