いくつかの Web サイトのリストを含むテーブルと、それらの統計を含むテーブルがあります。
class Site(models.Model):
domain_name = models.CharField(
max_length=256,
unique=True,
)
class Stats(models.Model):
date = models.DateField()
site = models.ForeignKey('Site')
google_pr = models.PositiveIntegerField()
class Meta:
unique_together = ('site', 'date')
特定の日付のすべてのサイトと統計を表示したい. 日付の統計レコードが存在しない場合、選択にはサイトのみが含まれている必要があります。
私が使用する場合:
Site.objects.filter(stats__date=my_date)
テーブルmy_date
にレコードがないサイトは取得できません。stats
この場合、SQL クエリは次のようになります。
SELECT *
FROM site
LEFT OUTER JOIN stats ON site.id = stats.site_id
WHERE stats.date = 'my_date'
クエリ条件は、NULL 日付のレコードを除外し、統計のないサイトは選択に含まれません。
私の場合、すでに日付でフィルタリングされている統計テーブルに参加する必要があります。
SELECT *
FROM site
LEFT OUTER JOIN
(SELECT *
FROM stats
WHERE stats.date = 'my-date') AS stats
ON site.id = stats.site_id
このクエリを Django ORM に変換するにはどうすればよいですか?
ありがとう。