Django ArrayAgg - 过滤带注释的数组

问题描述

class Language(models.Model):
    iso_code = models.CharField()

class Publisher(models.Model)
    name = models.CharField()

class Book(modle.Model):
    name = models.CharField()
    language = models.ForeignKey(Language)
    publisher = models.ForeignKey(Publisher,related_name='books')

lang_ids = [1,2]

qs = Publisher.objects.annotate(
    x=ArrayAgg(
        Case(
            When(
                books__language__in=lang_ids,then="books__name"
            )
        )
    )
)

我想过滤这里显示的 qs - https://docs.djangoproject.com/en/3.1/ref/contrib/postgres/fields/#len

qs.filter(x__len=2)

为什么不能用这种方式过滤qs?我收到错误 IndexError:元组索引超出范围。

ArrayAgg 中的输出字段是 ArrayField

class ArrayAgg(OrderableAggMixin,Aggregate):
    function = 'ARRAY_AGG'
    template = '%(function)s(%(distinct)s%(expressions)s %(ordering)s)'
    allow_distinct = True

    @property
    def output_field(self):
        return ArrayField(self.source_expressions[0].output_field)

    def convert_value(self,value,expression,connection):
        if not value:
            return []
        return value

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)