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 开始