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.