带有字段比较结果的django注释查询集
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有字段比较结果的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')))
所有帮助将不胜感激。
UPDATE:
[我找到了一个对我有用的替代解决方案(使用filter
和exclude
根据匹配结果过滤预测),但是我仍然想知道如何解决这种特殊情况,即新的带注释字段是queryset的其他两个字段之间比较的结果。对于可能需要它的人,在Django 2.2
和更高版本中,Nullif database function在两个字段之间进行比较。
答案
您可以使用extra函数,这是一个将特定子句注入SQL的钩子。
在您的情况下,将是这样:
predicts = predicts.extra(select={'is_correct': "predict = result"})
这会在结果中添加一个名为is_correct
的字段,在数据库中,必须以相同的方式调用字段。
最好查看模型。
以上是关于带有字段比较结果的django注释查询集的主要内容,如果未能解决你的问题,请参考以下文章