python 数组元素的过滤器将把右边的元素强制转换为数组

68bkxrlz  于 2023-04-28  发布在  Python
关注(0)|答案(1)|浏览(94)

我在使用Django过滤数组元素时遇到了困难(使用PostgreSQL表)假设我有一个模型MyModel,其字段my_array包含布尔值(类型并不重要),我想检查数组的第一个元素是否为True。
对我来说最自然的方法就是

MyModel.objects.filter(bool_array__0=True)

但是,这会生成以下SQL筛选器

... WHERE bool_array[1] = true::boolean[]

这里的问题是django自动将右侧转换为boolean[],并最终将booleanboolean[]进行比较。
我试过使用__in查找,并将[True]而不是True,但也不起作用。
先谢谢你了

b0zn9rqh

b0zn9rqh1#

ArrayField的文档可能会产生误导:

from django.contrib.postgres.fields import ArrayField
from django.db import models

class ChessBoard(models.Model):
    board = ArrayField(
        ArrayField(
            models.CharField(max_length=10, blank=True),
            size=8,
        ),
        size=8,
    )

如果你不注意,你会得到一个嵌套的数组。在你的模型中,你应该声明:

my_array = ArrayField(base_field=models.BooleanField())

为了得到一个普通的布尔数组。

相关问题