python - 如何编写一个 Django 查询,其中我的 WHERE 条件的左侧是一个数学表达式?
问题描述
我正在使用 Django、Python 3.7 和 PostGres 9.5。我有一个具有以下字段的模型...
class DomainTrackerStat(models.Model):
domain = models.CharField(max_length=255)
...
num_negative_articles = models.IntegerField(default=0, null=False)
num_positive_articles = models.IntegerField(default=0, null=False)
我想写一个 Django 查询,告诉我所有条件匹配这个 PostGres WHERE 子句的对象
WHERE num_negative_articles / (num_negative_articles + num_positive_articles) > .95
但是我在编写 Django 查询表达式时遇到了麻烦,因为通常它只允许一个字段,例如
DomainTrackerStat.objects.filter(num_negative_articles__gt=.95)
如何编写这个更复杂的查询?
解决方案
F() 表达式可用于在模型字段之间执行算术运算(+、-、* 等),以定义它们之间的代数查找/连接。
F() 对象表示模型字段或注释列的值。它可以引用模型字段值并使用它们执行数据库操作,而无需将它们从数据库中拉出到 Python 内存中。
data = DomainTrackerStat.objects.annotate(result=F('num_negative_articles') / (F('num_negative_articles') + F('num_positive_articles'))).filter(result__gt=0.95)
现在数据中的每个项目都有一个名为“结果”的额外列,其中包含“num_positive_articles”和“num_negative_articles”分别除以每个项目的“num_negative_articles”的乘积。
供进一步参考的文档
推荐阅读
- delphi - 将 JObject 转换为 JList
- java - JVMTI_EVENT_COMPILED_METHOD_* 和 JVMTI_EVENT_DYNAMIC_CODE_GENERATED 之间有什么区别?
- python - .exe 可以在 Mac、Linux 或其他平台上运行吗?
- javascript - 如何正确使用“样式组件”?
- python - 如何有效地绘制一个图,其中每个节点代表欧几里得空间中的一个点?
- c++ - 将 TForm 作为参数传递给函数
- c# - 未经身份验证的用户被重定向到 mysitedomain/projectfolder 而不是 mysitedomain/projectfolder/master/login。.net mvc
- reactjs - 使用 axios 调用 api 后值不会更新
- laravel - Laravel Eloquent 组的关系结果
- php - 放大 federatedSignIn 返回没有范围的 accessToken