PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como faço para consultar o comprimento de um Django ArrayField?


O extra() A função foi preterida de acordo com o documentos :

Veja como você pode fazer a mesma coisa usando uma Anotação personalizada função:
from django.db import models

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

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

Observe que a cardinalidade() A função está disponível no PostgreSQL 9.4 ou posterior. Se estiver usando uma versão mais antiga, use array_length() :
MyModel.objects.all().annotate(field_len=Func(F('field'), 1, function='array_length')).order_by('field_len')

Uma ressalva com esta segunda consulta é que uma matriz vazia será classificada na frente de todas as não vazias. Isso pode ser resolvido unindo NULL valores de array_length para 0.