extra()
funkce byla zastaralá podle dokumenty
:
Zde je návod, jak můžete udělat totéž pomocí vlastní Anotace
funkce:
from django.db import models
class ArrayLength(models.Func):
function = 'CARDINALITY'
MyModel.objects.all().annotate(field_len=ArrayLength('field')).order_by('field_len')
Upozorňujeme, že kardinalita()
Funkce je dostupná v PostgreSQL 9.4 nebo novějším. Pokud používáte starší verzi, musíte použít délka_pole()
:
MyModel.objects.all().annotate(field_len=Func(F('field'), 1, function='array_length')).order_by('field_len')
Jednou výhradou u tohoto druhého dotazu je, že prázdné pole bude seřazeny před všemi neprázdnými. To by se dalo vyřešit sloučením NULL
hodnoty z délka_pole
na 0.