我是 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。