PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie frage ich die Länge eines Django ArrayField ab?

Das extra() Funktion wurde gemäß Dokumente :

So können Sie dasselbe mit einer benutzerdefinierten Anmerkung tun Funktion:

from django.db import models

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

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

Beachten Sie, dass die Kardinalität() -Funktion ist in PostgreSQL 9.4 oder höher verfügbar. Wenn Sie eine ältere Version verwenden, müssen Sie array_length() :

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

Eine Einschränkung bei dieser zweiten Abfrage ist, dass ein leeres Array vor allen nicht leeren sortiert wird. Dies könnte durch Zusammenfügen von NULL gelöst werden Werte aus array_length auf 0.