如何修复“无法计算计数:字段是一个聚合”Django

vi4fp9gy  于 2023-05-23  发布在  Go
关注(0)|答案(1)|浏览(134)

我需要注解每个消息的基础上,它的注解标签。请注意,我们需要比较标签的内容,而不仅仅是标签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))

知道怎么弄到这个吗

ruoxqz4g

ruoxqz4g1#

我认为你想要的是通过使用'pk'作为Count函数的参数来完成的。
所以第二个注解是这样的

.annotate(count=Count('pk'))

希望能有所帮助

相关问题