python - 对记录的值进行计数和求和,通过 Django 中的外键字典进行过滤

标签 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',
                              )  

我有一个由客户端方法创建的外键列表。我想做两件事,首先我想计算所有具有名称为“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)  

该方法生成客户端列表的位置。

最佳答案

对名称为“XYZ”的 task_type 的所有任务进行计数,仅限于查询集中的客户端

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'))

关于python - 对记录的值进行计数和求和,通过 Django 中的外键字典进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8656749/

相关文章:

django 覆盖模型 save() 方法

python - VSCode python 解释器对内置函数发出警告

python - 如何以图像的形式保存CNN模型的输出(预测)?

python - 列表比较算法 : How can it be made better?

python - 在 django 中使用 crispy_forms 时,'FormHelper' 对象没有属性 'append'

python - 在 Django 模型中创建外键

python - `logging.basicConfig(level=logging.INFO)` 是否应该只接受 INFO 级别的日志记录?

Python:RE 与查询

Django 多文件上传

django-models - 自动为 OneToOne 字段选择相关