extra()
funktion er blevet forældet i henhold til dokumenter
:
Her er, hvordan du kan gøre det samme ved at bruge en tilpasset Annotation
funktion:
from django.db import models
class ArrayLength(models.Func):
function = 'CARDINALITY'
MyModel.objects.all().annotate(field_len=ArrayLength('field')).order_by('field_len')
Bemærk, at kardinalitet()
funktion er tilgængelig i PostgreSQL 9.4 eller nyere. Hvis du bruger en ældre version, skal du bruge array_length()
:
MyModel.objects.all().annotate(field_len=Func(F('field'), 1, function='array_length')).order_by('field_len')
En advarsel med denne anden forespørgsel er, at et tomt array vil blive sorteret foran alle ikke-tomme. Dette kunne løses ved at samle NULL
værdier fra array_length
til 0.