sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo consulto la longitud de un Django ArrayField?

El extra() ha quedado obsoleta de acuerdo con documentos :

Así es como puede hacer lo mismo usando una Annotation personalizada función:

from django.db import models

class ArrayLength(models.Func):
    function = 'CARDINALITY'

MyModel.objects.all().annotate(field_len=ArrayLength('field')).order_by('field_len')

Tenga en cuenta que el cardinality() La función está disponible en PostgreSQL 9.4 o posterior. Si está usando una versión anterior, debe usar array_length() :

MyModel.objects.all().annotate(field_len=Func(F('field'), 1, function='array_length')).order_by('field_len')

Una advertencia con esta segunda consulta es que una matriz vacía se ordenará delante de todas las que no estén vacías. Esto podría resolverse fusionando NULL valores de array_length a 0.