当前位置: 首页 > 面试题库 >

如何在Django QuerySet中添加其他列

长孙章横
2023-03-14
问题内容

我有一个带有Books的QuerySet,我想score为每个Book结果添加一个字段。

qs = Book.objects.all()

在原始SQL中,我会写:

SELECT
    *,
    (
        (SELECT COUNT(*) FROM votes WHERE value=1 AND book=b.id) - 
        (SELECT COUNT(*) FROM votes WHERE value=-1 AND book=b.id)
    ) AS score
FROM
    Book b;

如何在Django中实现?我试过了annotate(),但似乎并不适合这种东西。


问题答案:

如遇票数可能的值是只有1和-1,你可以使用刚才提到他们总结注释:Book.objects.annotate(score=Sum('votes__value'))

如果还有更多可能的值,则可以通过添加.filter(votes__value__range=(1,1))到上述查询中来过滤注释。

如果是更复杂的,你将不得不使用extraselect



 类似资料:
  • 问题内容: 有没有一种方法可以使用javascript和JQuery添加一些其他字段,这些字段将使用POST从HTTP表单发送? 我的意思是: 问题答案: 是的。您可以尝试使用一些隐藏的参数。

  • 问题内容: 如何控制转盘中包含哪些文件?似乎没有被使用。 更新 : 我错了从源tarball安装与安装轮子之间的区别。源代码发行版包含中指定的文件,但已安装的软件包仅包含python文件。无论是通过源分发版,egg还是wheel安装,都需要采取步骤来确定应安装的其他文件。即,其他软件包文件需要package_data,而软件包外部文件(例如命令行脚本或系统配置文件)需要data_files。 原始

  • 我有以下名为“生产”的熊猫数据框架,并希望根据其种类、温室和年/月获得每种植物生产的重量 例如,对于“2020-05”,我们有GH1和GH2。在GH1中,S1(工厂0001和0002)的总产量为400(200),因此工厂0001的重量为0.50,工厂0002的重量为0.50。S2的总产量为150(100 50);因此,我们将植物0003的重量定为0.66(100/150),将植物0004的重量定为

  • 我正在学习JSwing,我发现了GridBagLayout。 我试图创建一个简单的计算器,我添加了多个JPanel设置每个首选大小,但当我调整窗框大小时,面板也不会调整大小。然后我发现了Gridbag的布局。 但我得到的是:GridBagLayout的计算器错误 } 应该是这样的:正确的计算器 我试过: 要锚定。。。但它不起作用, 创建多个JPanel(一个带有GridLayout),但不起作用

  • 我使用文件路径解析 Spark 数据帧,但现在我想将路径与时间一起作为单独的列添加到生成的数据帧中。下面是一个当前的解决方案(pathToDF 是一个帮助器方法): 我正在尝试做这样的事情,但我不确定如何使用Column添加时间列: 实现它的更好方法是什么? 输入自由度: 当前结果: 预期结果: