如何在 Django 中更改要在注释期间求和的单个值



我是 django 的前端开发人员。在我们的 postgres DB 中有一列 (server_reach(,其值为 (1,2(。但是我需要编写一个查询,告诉我是否至少有一个过滤行具有可访问值的行( 1 = 不可访问,2 = 可访问(。

最初被告知该列的值将是 (0,1(,我基于此编写以下内容:

ServerAgent.objects.values('server').filter(
    app_uuid_url=app.uuid_url,
    trash=False
).annotate(serverreach=Sum('server_reach'))

逻辑很简单,我获取所有过滤的行并用server_reaches的总和注释它们。如果此值大于零,则至少有一个条目不为零。

但问题是实际数据库具有值 (1,2(。这种逻辑将不再有效。我想在求和之前将每行的server_reach减去"1"。我尝试过以下 F 表达式

ServerAgent.objects.values('server').filter(
    app_uuid_url=app.uuid_url,
    trash=False
).annotate(serverreach=Sum(F('server_reach')-1))

但它会引发以下错误。请帮我让它工作。

AttributeError: 'ExpressionNode' object has no attribute 'split'

使用 Avg 而不是 Sum 。 如果平均值大于 1,则至少有一行包含值 2。

最新更新