Django查询以获取每个员工的最新活动条目

时间:2014-06-23 00:46:15

标签: django

我有一份员工名单,我想知道他们最后完成的活动。

class Employee(Human):
    ... additional Employee Fields ...

    def get_last_activity(self):
        try:
            return self.activity_set.all().order_by('-when')[0:1].get()
        except Activity.DoesNotExist:
            return None
上面的

get_last_activity将针对单个实例执行我想要的操作。但是,如果我为列表中的每个员工调用一次这种方法,我会追加几百个额外的查询。

活动如下:

class Activity(models.Model):
    when = models.DateTimeField()
    employee = models.ForeignKey(Employee, related_name='activity_set')
    ...additional activity fields...

查询如下所示:

Employee.objects.all.annotate(last_activity_timestamp=Max('activity_set__when'))\
    .filter(Q(activity_set__when__lte=timezone.now()) 
            | Q(activity_set__when__isnull=True))\
    .order_by('last_name', 'first_name')

活动列表包括未来计划的活动,因此我必须使用activity_set__when__lte=timezone.now()

进行过滤

这会在运行查询时为我提供一个名为last_activity_timestamp的额外成员的员工记录。我想得到last_activity的整个活动记录,而不仅仅是注释中的一部分。

英语:给我列表中的每个员工,并在每个员工中包含他们在名为last_activity的字段中执行的最后一项活动的所有详细信息。在一个查询中执行此操作。

这已经证明非常难以实现,所以我必须遗漏一些基本的东西。

这个问题类似于this one,这是我为获得相同的最终结果而采取的另一种方法。他们俩都没做我想做的事。

0 个答案:

没有答案