gpt4 book ai didi

python - 如何编写 Django 查询,其中 WHERE 条件的左侧是数学表达式?

转载 作者:行者123 更新时间:2023-12-01 01:03:40 25 4
gpt4 key购买 nike

我正在使用 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() 表达式可用于在模型字段之间执行算术运算(+、-、* 等),以便定义它们之间的代数查找/连接。

An F() object represents the value of a model field or annotated column. It makes it possible to refer to model field values and perform database operations using them without actually having to pull them out of the database into Python memory.

data = DomainTrackerStat.objects.annotate(result=F('num_negative_articles') / (F('num_negative_articles') + F('num_positive_articles'))).filter(result__gt=0.95)

现在,数据中的每个项目都有一个名为“result”的额外列,其中包含“num_positive_articles”和“num_negative_articles”的乘积分别除以每个项目的“num_negative_articles”。

Documentation供进一步引用

关于python - 如何编写 Django 查询,其中 WHERE 条件的左侧是数学表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55577063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com