具有一定条件的Django计数相关对象
我的django应用程序中有以下模型类:具有一定条件的Django计数相关对象,django,django-models,django-annotate,django-aggregation,Django,Django Models,Django Annotate,Django Aggregation,我的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=C
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
look-up)。首先我是这样做的:
query.filter(clicks__time__hour__range=[12, 13]).annotate(views_count=Count('views',distinct=True), clicks_count=Count('clicks', distinct=True))
但是在该范围内没有任何点击的广告将以这种方式从查询中删除,但我需要它们出现在最终查询中。
使用Django条件表达式是否有合适的方法可以做到这一点?根据,您应该能够在计数
聚合中进行筛选
from django.db.models import Count, Q
query.annotate(
views_count=Count('views',distinct=True),
clicks_count=Count('clicks', distinct=True, filter=Q(time__hour__range=[12, 13])),
)