我有一个表,其中一列为date. 每个日期可以有多个条目。
date .....
----------- -----
2015-07-20 ..
2015-07-20 ..
2015-07-23 ..
2015-07-24 ..
Run Code Online (Sandbox Code Playgroud)
我想使用 Django ORM 和 PostgreSQL 作为数据库后端以下列形式获取数据:
date count(date)
----------- -----------
2015-07-20 2
2015-07-21 0 (missing after aggregation)
2015-07-22 0 (missing after aggregation)
2015-07-23 1
2015-07-24 1
Run Code Online (Sandbox Code Playgroud)
WITH RECURSIVE date_view(start_date, end_date)
AS ( VALUES ('2015-07-20'::date, '2015-07-24'::date)
UNION ALL SELECT start_date::date + 1, end_date
FROM date_view
WHERE start_date < end_date )
SELECT start_date, count(date)
FROM date_view LEFT JOIN my_table ON date=start_date
GROUP BY …Run Code Online (Sandbox Code Playgroud) 给定以下关系:
class LicenseRequest:
license_type = models.ForeignKey(LicenseType)
created_at = models.DateField(default=now, editable=False)
class LicenseType:
name = models.CharField(max_length=100)
value = models.CharField(max_length=3, unique=True)
Run Code Online (Sandbox Code Playgroud)
我想计算为每种许可证类型创建了多少个请求。但是,由于我正在生成图形,因此对于在该特定时间段内没有任何许可证请求的许可证类型,我必须包含 0(零)。
我尝试按照此处的建议进行操作,但没有成功。我只能从具有多个许可证请求的许可证类型中获取计数。
qs = LicenseType.objects.filter(
Q(licenserequest__created_at__range=(start_date, end_date)) | Q(licenserequest__isnull=True)
).annotate(rel_count=Count('licenserequest__id'))
Run Code Online (Sandbox Code Playgroud)
我可以找到另一种方法来实现这个目标,但我想知道是否可以通过注释来做到这一点。
我正在使用django1.11.15。