Django 从注释计数中排除

2024-03-17

我有以下申请:

from django.db import models


class Worker(models.Model):
    name = models.CharField(max_length=60)

    def __str__(self):
        return self.name


class Job(models.Model):
    worker = models.ForeignKey(Worker)
    is_completed = models.BooleanField()

我想用已完成作业的计数来注释 Workers 查询。

我将尝试使用以下脚本来完成此操作:

from myapp.models import Worker, Job
from django.db.models import Count

w = Worker.objects.create(name='Worker1')
Job.objects.create(worker=w, is_completed=False)
Job.objects.create(worker=w, is_completed=False)
Job.objects.create(worker=w, is_completed=True)
Job.objects.create(worker=w, is_completed=True)

workers = Worker.objects.all().annotate(num_jobs=Count('job'))
workers[0].num_jobs    
# >>> 4
workers = Worker.objects.all().exclude(job__is_completed=False).annotate(num_jobs=Count('job'))
# >>> []

最后一次查询的结果为空。如何从反向关系中排除元素?

Django 1.8、Python 2.7

UPD.我希望查询集中有所有工作人员,即使是那些工作为零的工作人员


update:好的,我用这个来生成解决方案,我想我用它得到了它条件表达式 https://docs.djangoproject.com/en/1.8/ref/models/conditional-expressions/:

条件表达式让您可以使用 if ... elif ... else 逻辑 过滤器、注释、聚合和更新。有条件的 表达式计算表中每一行的一系列条件 并返回匹配结果表达式。

Note: 条件表达式 https://docs.djangoproject.com/en/dev/ref/models/conditional-expressions/(例如Case and When) are Django 1.8 中的新功能,正如@Pynchia 所指出的

from django.db.models import IntegerField, Sum, Case, When

workers = Worker.objects.annotate(
              num_jobs=Sum(
                  Case(
                      When(job__is_completed=True, then=1),
                      default=0,  
                      output_field=IntegerField()
                  )
               )
           )

现在,每个工人都会有一个 num_jobs ,它是一个整数,显示工人有多少已完成的工作:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 从注释计数中排除 的相关文章

随机推荐

  • python类中私有变量的实际实现[重复]

    这个问题在这里已经有答案了 可能的重复 Python 中对象名称前的单下划线和双下划线的含义 https stackoverflow com questions 1301346 the meaning of a single and a d
  • h2o.glm 与 R 中的线性回归的 glm 不匹配

    我一直在将 H2O ai 版本 3 10 3 6 与 R 结合使用 我正在努力用 h2o glm 复制 glm 的结果 我期望得到完全相同的结果 在这种情况下 根据均方误差进行评估 但我发现 h2o 的准确性一定更差 由于我的模型是高斯模型
  • 使用 CSS 影响 iframe 内的 div 样式

    是否可以仅使用 CSS 来更改驻留在页面 iframe 内的 div 的样式 你需要 JavaScript 它与在父页面中执行此操作相同 只是您必须在 JavaScript 命令前加上 iframe 的名称 请记住 同源策略适用 因此您只能
  • Java中JTextArea的自动动态扩展/收缩

    我首先创建一个特定大小的 JTextArea 用户可以在其中添加文本 但如果文本太长 垂直或水平 则会被截断 我希望 JTextArea 自动扩展或收缩 用于删除文本 我将来可能允许用户更改字体和字体大小 因此如果我可以避免使内容增加 减少
  • C# 和 WPF - 使用 SecureString 作为客户端 HTTP API 密码

    在编写 WPF 应用程序时 PasswordBox将输入的密码存储为SecureString 这完全有道理 但是 我想通过 HTTP API 发送密码 并且HttpClientPostAsync 似乎接受表单编码数据的字符串 我知道其他人也
  • CheckedListBox - 通过文本搜索项目

    我有一个CheckedListBox绑定到一个DataTable 现在我需要以编程方式检查一些项目 但我发现SetItemChecked 方法仅接受项目索引 有没有一种实用的方法可以在不知道项目索引的情况下通过文本 标签获取项目 注意 我对
  • 无法在 Linux 上安装 sqldf

    我在 Linux 上运行 R 版本 2 14 1 当我尝试安装 sqldf 时 install packages sqldf dependencies TRUE 我收到以下错误 这些错误导致从终端运行命令 就像使用 Rcmdr UI 一样
  • mongoDB 错误:错误:无法连接到 [localhost:27017]

    我正在尝试安装habitrpg https github com busterroni habitrpg在本地 但我在输入后不断收到 mongoDB 错误node src seed js Error failed to connect to
  • C# Mono Linux - 抓取全局剪贴板的内容

    我试图简单地从剪贴板 抓取 文本并将其放入变量中 我在做这件事时遇到了很多麻烦 我尝试过使用 Gtk Clipboard Get Gdk Atom Intern PRIMARY true 到目前为止 我的代码只是将 Gtk Clipboar
  • youtube-api removeEventListener 不工作

    我可以很好地添加事件 addEventListener onStateChange handleStateChange 但当尝试删除该事件时 却没有 removeEventListener onStateChange handleState
  • 获取当前位置div的ID

    我有n个 section 在一个页面中 每个页面都提供了 id 例如 page1 page2 在顶部我放置了 2 个按钮 即 上一个 和 下一个 当按下上一个按钮时 它将滚动到上一个 section 与下一个类似 section 按 下一步
  • JAX-WS - 添加 SOAP 标头

    我正在尝试创建一个独立的客户端来使用一些网络服务 我必须将我的用户名和密码添加到 SOAP 标头中 我尝试添加凭据 如下所示 OTSWebSvcsService service new OTSWebSvcsService OTSWebSvc
  • Facebook 应用程序请求通知未显示在移动网络应用程序的 Facebook iOS 应用程序中

    我有一个配置为 Facebook 画布应用程序的 Facebook 应用程序以及一个包含网站和移动网站 URL 的网站 当应用程序发送应用程序请求 邀请 时 它们仅显示在桌面浏览器中的收件人通知中 而不显示在 Facebook iOS 应用
  • Firebase DatabaseReference 按指定值过滤

    假设我有这个 firebase JSON 结构 我需要获取属性 from 等于 this 的所有问题 我知道我可以使用 Volley 来创建 StringRequest 并从我的 questions json 中获取所有值 然后 在客户端
  • 如何让服务帐户只能访问一个存储桶(Google Cloud)?

    如何提供服务帐号只能访问一个桶 如果你以防万一想再给一个第3方服务访问您的private bucket 问题是默认的 服务帐户 可以访问所有存储桶 但我不知道如何将其限制为仅限一个存储桶 是否可以通过仪表板或仅通过控制台来实现此目的 如果可
  • 向样式组件添加过渡

    我在 React 中有以下组件 const Button styled div width 30px height 30px position absolute right 2em top 50 transform translateY 5
  • 使用秒表分析 .NET 应用程序

    似乎没有免费的 NET 性能分析器可以逐行进行分析 因此 我正在考虑使用秒表进行分析 免费即自由 即许可证包括商业应用程序 编辑 为了回应那些告诉我 购买分析器 的人 我愿意 但如果我能花那么多钱 我会把它花在其他东西上 我试图让我的老板相
  • 如何仅循环 select() 的 fd_set 结果中的活动文件描述符?

    所以在我当前的服务器实现中 目前是这样的 void loop step 1 clear set fd set readfds while true step 1 FD ZERO readfds step 2 loop through soc
  • Node.js UDP (dgram) 处理 DNS 解析错误

    我正在使用 Node 的内置数据报 UDP 套接字进行简单的 UDP 发送 http nodejs org docs v0 3 1 api dgram html http nodejs org docs v0 3 1 api dgram h
  • Django 从注释计数中排除

    我有以下申请 from django db import models class Worker models Model name models CharField max length 60 def str self return se