De extra()
functie is verouderd volgens de docs
:
Hier leest u hoe u hetzelfde kunt doen met een aangepaste Annotatie
functie:
from django.db import models
class ArrayLength(models.Func):
function = 'CARDINALITY'
MyModel.objects.all().annotate(field_len=ArrayLength('field')).order_by('field_len')
Merk op dat de kardinaliteit()
functie is beschikbaar in PostgreSQL 9.4 of hoger. Als je een oudere versie gebruikt, moet je array_length()
:
MyModel.objects.all().annotate(field_len=Func(F('field'), 1, function='array_length')).order_by('field_len')
Een waarschuwing bij deze tweede query is dat een lege array voor alle niet-lege wordt gesorteerd. Dit kan worden opgelost door NULL
. samen te voegen waarden van array_length
naar 0.