【发布时间】:2021-02-12 16:55:34
【问题描述】:
我有一个 LogTable,每周大约有 500k 个条目。
models.py
class Log(models.Model):
timestamp= models.DateTimeField()
name = models.CharField(max_length=30)
status = models.PositiveIntegerField()
objects = LogManager()
我想按时间戳对条目进行分组,并返回每个时间戳的每个状态的计数。像这样:
timestamp | automated | offline | user | inactive
29.10.20 17:40 | 5 | 40 | 30 | 15
29.10.20 17:45 | 10 | ....
我用这样的经理试过这个:
class LogManager(models.Manager):
def auto(self, timestamp):
return self.filter(datetime__exact=timestamp).filter(status__exact=0).count()
def inactive(self, timestamp):
return self.filter(datetime__exact=timestamp).filter(status__exact=1).count()
def offline(self, timestamp):
return self.filter(datetime__exact=timestamp).filter(status__exact=2).count()
def user(self, timestamp):
return self.filter(datetime__exact=timestamp).filter(status__exact=3).count()
def activity(self, timestamp):
data = {
'timestamp': timestamp,
'auto' : self.auto(timestamp),
'inactive' : self.inactive(timestamp),
'offline': self.offline(timestamp),
'user': self.user(timestamp),
}
return data
def activity_sum(self):
obj = self.values_list('datetime', flat=True)
data = {}
for i, time in enumerate(obj):
data[i] = self.activity(time)
return data
但这不可能,因为如果我计算结果大约需要 10 分钟 调用 Log.objects.activity_sum()。我觉得有一个简单的答案,但我就是找不到。
感谢您帮助我。
【问题讨论】:
标签: django django-models django-aggregation