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.