extra()
docs
:
カスタムのアノテーション
を使用して同じことを行う方法は次のとおりです。 機能:
from django.db import models
class ArrayLength(models.Func):
function = 'CARDINALITY'
MyModel.objects.all().annotate(field_len=ArrayLength('field')).order_by('field_len')
cardinality()コード>
関数はPostgreSQL9.4以降で使用できます。古いバージョンを使用している場合は、 array_length()
:
MyModel.objects.all().annotate(field_len=Func(F('field'), 1, function='array_length')).order_by('field_len')
この2番目のクエリの1つの注意点は、空の配列がすべての空でない配列の前にソートされることです。これは、 NULL
を合体させることで解決できます。 array_length
の値 0に。