django - django 用字段比较结果注释查询集
问题描述
我有一个这样的查询集:
predicts = Prediction.objects.select_related('match').filter(match_id=pk)
我需要用一个新字段对此进行注释is_correct
。我需要比较两个字符串字段,结果应该在这个新字段中进行注释。我要比较的字段是:
predict
从预测表result
来自匹配表(已通过 连接select_related
)
我需要知道我应该在我的注释函数中放入什么表达式;下面我有我当前的代码,它通过一个TypeError
异常:
predicts = predicts.annotate(is_correct=(F('predict') == F('result')))
所有帮助将不胜感激。
更新:
filter
我找到了一个可以为我完成这项工作的替代解决方案(使用and过滤基于匹配结果的预测exclude
),但我仍然想知道如何解决这种特殊情况,其中新的注释字段是其他两个字段之间比较的结果的查询集。对于那些可能需要它的人,Django 2.2
Nullif数据库函数会在两个字段之间进行比较。
解决方案
您可以使用额外的函数,一个将特定子句注入 SQL 的钩子。
首先,我们必须知道应用程序和模型的名称,或者数据库中表的名称。
假设在您的情况下,这两个表称为“app_prediction”和“app_match”。
句子如下:
Prediction.objects.select_related('match').extra(
select={'is_correct': "app_prediction.predict = app_match.result"}
)
这将is_correct
在结果中添加一个名为的字段,在数据库中,字段和表必须以相同的方式调用。
最好看看模型。
推荐阅读
- c++ - 没有虚函数的类的多态性?
- android - 需要一个圆形图像按钮,将图像剪辑成一个圆圈
- javascript - 什么是编写实时文本搜索和突出显示功能的足够好的方法,它不会破坏文本和元素节点的顺序
- html - 使用 href 属性从 HTML 文件打开时,Django URL 未在浏览器中加载响应
- oauth - 如何将 OAuthCard 的“登录”按钮的行为更改为仅打开 URL 而无需重定向
- r - 将 Google 字体与 R 的 Reactable 表一起使用
- python-3.x - 拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:“script-src 'strict-dynamic'
- r - R ggplot geom_tile x axis year quarter labeling
- kubernetes - 使用动态客户端执行 SSA 创建时找不到资源错误
- vue.js - ionic/vue/capacitor 本地通知检索多于通知id