计数和求和记录的值,由Django中的外键字典过滤

时间:2011-12-28 13:48:46

标签: python django django-models

我在使用这个简化模型的Django查询时遇到了问题:

class Client(models.Model):
    user_name = models.CharField

class Task(models.Model):
    client = models.ForeignKey(
                               'Client',
                               )
    task_type = models.ForeginKey(
                                  'Task_Type',
                                  )

class Task_Type(models.Model):
    name = models.CharField

class Task_Value(models.Model):
    value_num = models.DecimalField
    task = models.ForeignKey(
                             'Task',
                              )  

我有一个由Client方法创建的外键列表。我想做两件事,首先我要计算所有具有task_type的任务,名称为“XYZ”,仅限于字典中的客户端。其次,我想通过名称“ABC”将所有任务的所有value_num相加,仅限于字典中的客户端。这两个值将相加并除以字典中客户端的数量

下面是我拥有(并且正在工作)单个客户端的方法,但是我在列表中迭代这个方法时遇到了麻烦。

cnt = Task.objects.filter(client=self.pk,event_type__name__exact="XYZ").count()
tasks = Task.objects.filter(client=self.pk,event_type__name__exact="ABC")[0]
value = tasks.task_value_set.get(field__name__exact='ABC').value_num
answer = int(cnt+value)  

修改 该清单源自:

group = Client.objects.filter(pk__in=client_list)  

该方法生成客户端列表。

1 个答案:

答案 0 :(得分:2)

计算task_type名称为“XYZ”的所有任务,仅限于查询集中的客户

Task.objects.filter(client__in=clients, task_type__name='XYZ').count()

以“ABC”名称为所有任务汇总所有value_num,仅限于查询集中的客户。

from django.db.models import Sum

Task.objects.filter(client__in=clients, task_type__name='ABC').annotate(Sum('task_value__value_num'))