Django - 聚合模型中字段的相等值
Django - Aggregate equal values of fields in model
我有 activity 用户活动日志,基本结构如下:
class ActivityLog(TimeStampedModel):
user = models.ForeignKey(User, on_delete=models.CASCADE)
action_type = models.CharField(max_length=25)
object_raw = models.CharField(max_length=500)
我想汇总 object_raw 匹配的所有条目,也就是说,如果用户在 4 个不同的场合搜索 'foo',我会返回 'foo' 的一个条目,其中计数=4。我现在很难做到这一点。我知道如何在 sql 中执行此操作,但不了解 django 语法。我一直在阅读文档,但我仍然不明白。如果有人能提供帮助,将不胜感激!
要获得一个 'foo'
的对象以及有多少对象 object_raw='foo'
你可以这样做:
activity_logs = ActivityLog.objects.filter(object_raw='foo')
if activity_logs.exists():
activity_logs.first() # get one object
activity_logs.count() # get number of objects
如果你只想知道有多少对象有object_raw='foo'
,你可以使用conditional expressions with aggregates:
from django.db.models import IntegerField, Sum
Client.objects.aggregate(
num_object_raw=Sum(
Case(
When(object_raw='foo', then=1),
output_field=IntegerField()
)
)
)
我有 activity 用户活动日志,基本结构如下:
class ActivityLog(TimeStampedModel):
user = models.ForeignKey(User, on_delete=models.CASCADE)
action_type = models.CharField(max_length=25)
object_raw = models.CharField(max_length=500)
我想汇总 object_raw 匹配的所有条目,也就是说,如果用户在 4 个不同的场合搜索 'foo',我会返回 'foo' 的一个条目,其中计数=4。我现在很难做到这一点。我知道如何在 sql 中执行此操作,但不了解 django 语法。我一直在阅读文档,但我仍然不明白。如果有人能提供帮助,将不胜感激!
要获得一个 'foo'
的对象以及有多少对象 object_raw='foo'
你可以这样做:
activity_logs = ActivityLog.objects.filter(object_raw='foo')
if activity_logs.exists():
activity_logs.first() # get one object
activity_logs.count() # get number of objects
如果你只想知道有多少对象有object_raw='foo'
,你可以使用conditional expressions with aggregates:
from django.db.models import IntegerField, Sum
Client.objects.aggregate(
num_object_raw=Sum(
Case(
When(object_raw='foo', then=1),
output_field=IntegerField()
)
)
)