我有一个Django的问题,想请教一下:
我的一个模型包含具有可变值的特定指标。因此,我使用Arrayfield来处理这些值。
例如,一个指标有3个值,另一个只有2个值,而某些指标只有1个值。
现在,我想比较Arrayfield中的值。
我知道有那些花哨的F表达式,并尝试使用它们,但是我卡住了,因为似乎F不允许从ArrayField内部进行位置查找。
有人知道我是否可以使用F来进行Arrayfield的位置查找吗?还是我必须从Django进行直接SQL调用或更改我的数据库以使每个字段都只有一个值?
以下是模型:
从异常中看起来,我不允许给ArrayField位置提供F表达式(或者Django忽略位置...)。翻译后的SQL查询显示,似乎F无法处理ArrayField位置...
在Postgres中,满足我的需求的正确查询应该是:
我的一个模型包含具有可变值的特定指标。因此,我使用Arrayfield来处理这些值。
例如,一个指标有3个值,另一个只有2个值,而某些指标只有1个值。
现在,我想比较Arrayfield中的值。
我知道有那些花哨的F表达式,并尝试使用它们,但是我卡住了,因为似乎F不允许从ArrayField内部进行位置查找。
有人知道我是否可以使用F来进行Arrayfield的位置查找吗?还是我必须从Django进行直接SQL调用或更改我的数据库以使每个字段都只有一个值?
以下是模型:
class Indicators(models.Model):
datetime = models.DateTimeField(default=datetime.now)
name = models.TextField(default="none")
values = ArrayField(models.FloatField(default=0))
这是我想要实现的目标:
indicator_compareable = Indicators.objects.filter(name='compareable',
values__0=F('values__1')).values_list('values')
这引发了一个异常..
操作符不存在: double precision = double precision[] LINE 1: ...areable' AND "indicators"."values"[1] = ("...
正如Mikhail在我的帖子中的第一条评论中建议的那样,这里是我Django筛选器的翻译SQL:
SELECT "indicators"."values"[1] FROM "indicators"
WHERE ("indicators"."name" = 'compareable'
AND "indicators"."values"[1] = ("indicators"."values"))
从异常中看起来,我不允许给ArrayField位置提供F表达式(或者Django忽略位置...)。翻译后的SQL查询显示,似乎F无法处理ArrayField位置...
在Postgres中,满足我的需求的正确查询应该是:
SELECT values FROM indicators WHERE name='compareable' and
values[1]=values[2];
在我的搜索过程中,我找到了以下链接,但它们并没有帮助到我: Django F字段迭代 https://code.djangoproject.com/ticket/24709