我有这个型号:
class Interaction(models.Model):
user = models.ForeignKey(User)
codes = ArrayField(models.CharField(choices=CODE_CHOICES))
我正在尝试如何在Django中执行与此SQL查询相同的操作:
^{pr2}$extra(select={codes_len':'cardinality(codes)'})
,但是你
不能annotate
或aggregate
覆盖extra
字段。在annotate(Sum("cardinality('codes')"))
,但是
cardinality('codes')
不是模型上的字段。在Sum
的自定义聚合字段
还有cardinality
,但看起来。。。易碎。在__len
在
ArrayField
,但不是在
annotate(Sum('codes__len'))
。在WHERE
语句(这里省略),这些语句使得手工重建这个查询很困难。在在这一点上,我想我别无选择,只能在模型中添加一个codes
字段的长度,并用save()
来保持它的同步。在
真的没有别的办法吗?我错过什么了吗?在
结果是自定义聚合函数才是最好的选择!在
包括以下内容:
查询非常简单:
^{pr2}$相关问题 更多 >
编程相关推荐