我有一个表格,其中包含一些网站的列表和一个包含它们的统计信息的表格。
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')
Run Code Online (Sandbox Code Playgroud)
我想查看具体日期的所有站点和统计数据。如果该日期的统计记录不存在,则选择必须仅包含站点。
如果我使用:
Site.objects.filter(stats__date=my_date)
Run Code Online (Sandbox Code Playgroud)
我不会得到它没有记录网站my_date的stats表格。因为在这种情况下,SQL 查询将如下所示:
SELECT *
FROM site
LEFT OUTER JOIN stats ON site.id = stats.site_id
WHERE stats.date = 'my_date'
Run Code Online (Sandbox Code Playgroud)
查询条件将排除日期为 NULL 的记录,没有统计信息的站点将不包括在选择中。
在我的情况下,我需要加入已按日期过滤的统计表:
SELECT *
FROM site
LEFT OUTER JOIN
(SELECT *
FROM stats
WHERE stats.date = 'my-date') AS stats
ON site.id = stats.site_id
Run Code Online (Sandbox Code Playgroud)
如何将此查询转换为 Django ORM?
谢谢。