【发布时间】:2020-11-17 21:39:19
【问题描述】:
我的 django 应用中有这个模型类:
class Ad(models.Model):
...
class Click:
time = models.DateTimeField(auto_now_add=True)
ip = models.GenericIPAddressField()
ad = models.ForeignKey(
to=Ad,
related_name='views',
on_delete=CASCADE
)
class View:
time = models.DateTimeField(auto_now_add=True)
ip = models.GenericIPAddressField()
ad = models.ForeignKey(
to=Ad,
related_name='views',
on_delete=CASCADE
)
假设我有一个 Ad 对象的查询集。我想注释在第 12 小时到第 13 小时内发生的每个添加的点击次数(我们可以使用 range 查找)。首先我是这样做的:
query.filter(clicks__time__hour__range=[12, 13]).annotate(views_count=Count('views',distinct=True), clicks_count=Count('clicks', distinct=True))
但是那些在该范围内没有任何点击的广告将以这种方式从查询中省略,但我需要它们出现在最终查询中。
是否有任何适当的方法可以使用 Django 条件表达式?
【问题讨论】:
标签: django django-models django-annotate django-aggregation