Django Arrayfiled:用 arryafield 中的第一项注释查询集

Django Arrayfiled: Annotate queryset with the first item in the arryafield

我有一个模型可以用这样的东西来表示。

class BackPack(models.Model):
    person = models.ForeignKey(Person, db_index=True,
                             related_name='back_packs', on_delete=models.CASCADE)
    candy = ArrayField(models.CharField(max_length=203, null=True))

我想构建一个查询集,其中包含与一个人关联的所有背包,然后用糖果数组字段中的第一项进行注释。我尝试了以下方法;

first_candy = BackPack.objects.filter(person__id=200)\
                              .annotate(first_candy=F('candy__0'))

first_candy = BackPack.objects.filter(person__id=200)\
                              .annotate(first_candy=ExpressionWrapper(F('candy__0'),
                                                 output_field=CharField()))

first_candy 的输出包括数组字段中的每个项目,而不仅仅是第一个。

非常感谢任何有关正确执行此操作的帮助。

试试这个:

from django.db.models.expressions import RawSQL

BackPack.objects.filter(person__id=200).annotate(first_candy=RawSQL('candy[1]', ()))

Postgres 数组默认从 1 开始