如何根据多个标准聚合django中的记录

时间:2010-09-22 06:57:11

标签: django django-models

让我们说,我的Django应用程序中有以下模型。

class EventGroup
    name = models.CharField()

class Event(models.Model):
    name = models.CharField()
    group = models.ForeignKey(EventGroup)

class Severity(models.Model):
    name = models.CharField()
    group = models.ForeignKey(EventGroup)

class LogEntry(models.Model):
    timestamp = models.DateTimeField(auto_now_add=True)
    event = models.ForeignKey('Event')
    severity = models.ForeignKey('Severity')

查找组中每个事件的每个严重性的最新日志条目的最佳方法是什么?也就是说,如果我有一个具有一些严重性的事件组和一些与之相关的事件,我希望得到每个严重性和事件组合的最新日志条目列表。

1 个答案:

答案 0 :(得分:0)

最直接的方式是:

groups = EventGroup.objects.all()
for group in groups:
    for event in group.event_set.all():
        LogEntry.objects.filter(event = event).latest('timestamp')

这将多次击中数据库。

另一种方法是从LogEntry模型开始。这种方法需要较少的查询。

groups = EventGroup.objects.all()
for group in groups:
    LogEntry.objects.select_related().filter(event__group = group).latest('timestamp')

警告:我没有测试过这段代码。这对我有用。