gpt4 book ai didi

Django ORM。联接子查询

转载 作者:行者123 更新时间:2023-12-05 01:20:49 24 4
gpt4 key购买 nike

我有一个表,其中包含一些网站的列表和一个包含其统计信息的表。

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?

谢谢。

最佳答案

在Django v2.0中,使用FilteredRelation

Site.objects.annotate(
t=FilteredRelation(
'stats', condition=Q(stats__date='my-date')
).filter(t__google_pr__in=[...])

关于Django ORM。联接子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22902263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com