Django基数查询不允许按等号筛选,但适用于<或>

2024-05-14 08:35:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文档模型,它包含一个页面数组字段。我想找到所有零页文档的列表

模型字段:

content = ArrayField(models.TextField(), default=list, blank=True)

我使用注释函数首先为页数创建一个计算字段,然后尝试过滤等于零的页面。以下是我正在尝试运行的查询:

qs = Document.objects.all() \
            .annotate(content_len=Func(F('content'), function='CARDINALITY')) \
            .exclude(content_len=0) # this DOESN'T WORK
            .exclude(content_len__lt=1) # this WORKS

不工作的版本会生成以下SQL错误:

WHERE CARDINALITY("dockets_document"."content") = 0::text[]

>>> psycopg2.errors.CannotCoerce: cannot cast type integer to text[]

Tags: text文档模型default列表lenmodels页面
1条回答
网友
1楼 · 发布于 2024-05-14 08:35:36

这可能是因为Django无法推断字段的类型。您可以通过output_field参数指定它来给它一个“提示”:

from django.db.models import IntegerField

qs = Document.objects.annotate(
    content_len=Func(F('content'), function='CARDINALITY', output_field=IntegerField())
).exclude(content_len=0)

相关问题 更多 >

    热门问题