extra ()
hàm không được chấp nhận theo tài liệu
:
Đây là cách bạn có thể làm điều tương tự bằng cách sử dụng Annotation
tùy chỉnh chức năng:
from django.db import models
class ArrayLength(models.Func):
function = 'CARDINALITY'
MyModel.objects.all().annotate(field_len=ArrayLength('field')).order_by('field_len')
Lưu ý rằng cardinality ()
có sẵn trong PostgreSQL 9.4 hoặc mới hơn. Nếu bạn đang sử dụng phiên bản cũ hơn, bạn phải sử dụng array_length ()
:
MyModel.objects.all().annotate(field_len=Func(F('field'), 1, function='array_length')).order_by('field_len')
Một lưu ý với truy vấn thứ hai này là một mảng trống sẽ được sắp xếp trước tất cả những mảng không trống. Điều này có thể được giải quyết bằng cách liên kết NULL
giá trị từ array_length
thành 0.