我有一个模型:
class ModelA(models.Model):
field1 = ArrayField(models.IntegerField())
我希望能够获取ModelA中field1最大长度的前10个对象。我看到Django文档中有一个
len
过滤器可用,但那并不能满足我的要求。我该如何获取field1最大长度的前10个对象?
我有一个模型:
class ModelA(models.Model):
field1 = ArrayField(models.IntegerField())
len
过滤器可用,但那并不能满足我的要求。cardinality
。ModelA.objects.extra(select={'length':'cardinality(field1)'}).order_by('length')
array_length
函数(第二个参数为所需维度数量)。ModelA.objects.extra(select={'length':'array_length(field1,1)'}).order_by('length')
我最终也能够得到数组中元素的频率:
q = """
with norm (id, element) as (
select id, unnest(field1) from model;
)
select id, sum(case when element = 2 then 1 else 0 end) as count
from norm
group by id
order by count
limit 10;
"""
a = Model.objects.raw(q)
ModelA.objects.extra(select={'length': 'cardinality(field1)'}).order_by('length')
- Praful BagaiSELECT (cardinality(field1)) AS "length", "moduleName"."id", "moduleName"."field1" FROM "moduleName_modela" ORDER BY "length" ASC
- Praful Bagai