PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come posso interrogare la lunghezza di un Django ArrayField?

Il extra() la funzione è stata deprecata in base a documenti :

Ecco come puoi fare la stessa cosa usando un'Annotation personalizzata funzione:

from django.db import models

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

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

Tieni presente che cardinality() la funzione è disponibile in PostgreSQL 9.4 o versioni successive. Se stai utilizzando una versione precedente, devi utilizzare array_length() :

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

Un avvertimento con questa seconda query è che un array vuoto verrà ordinato davanti a tutti quelli non vuoti. Questo potrebbe essere risolto unendo NULL valori da array_length a 0.