我需要注解每个消息的基础上,它的注解标签。请注意,我们需要比较标签的内容,而不仅仅是标签id。
简化模型如下:
class Message(models.Model):
text = models.CharField(max_length=250)
class Annotation(models.Model):
message = models.ForeignKey(to=Message, on_delete=models.CASCADE)
text = models.CharField(max_length=249, blank=False)
labels = models.ManyToManyField(to=Label)
class Label(models.Model):
text = models.CharField(max_length=249, blank=False)
start = models.IntegerField()
end = models.IntegerField()
下面是我正在尝试的原始查询。Django给出的错误是它不能计算一个聚合的聚合。
subq = Annotation.objects.filter(message_id=OuterRef('id'), reviewed=True).annotate(
labels_combined=StringAgg(
Concat(
F('labels__start'),
F('labels__end'),
F('labels__text'),
),
output_field=CharField(),
delimiter=';',
order_by='labels__start',
default=Value('')
)
).values('labels_combined').distinct().annotate(count=Count('labels_combined')).values('count')
messages = messages.annotate(count=Subquery(subq))
知道怎么弄到这个吗
1条答案
按热度按时间ruoxqz4g1#
我认为你想要的是通过使用
'pk'
作为Count
函数的参数来完成的。所以第二个注解是这样的
希望能有所帮助