13

我正在尝试从我的模型中查询和注释一些数据:

class Feed(models.Model):     # Feed of content
    user = models.ForeignKey(User, on_delete=models.CASCADE)

class Piece(models.Model):    # Piece of content (video or playlist)
    removed = models.BooleanField(default=False)
    feed    = models.ForeignKey(Feed, on_delete=models.CASCADE)
    user    = models.ForeignKey(User, on_delete=models.CASCADE)

以下查询中未使用其他字段,因此我在此处跳过它们。

在我看来,我需要获取经过身份验证的用户的所有提要的查询集。注释应包含所有未删除部分的数量。

最初,Piece模型不包含removed字段,并且查询集的一切都很好,如下所示:

Feed.objects.filter(user=self.request.user).annotate(Count('piece'))

但是后来我将该字段添加removedPiece模型中,并且只需要计算未删除的部分:

Feed.objects.filter(user=self.request.user)
            .annotate(Count('piece'), filter=Q(piece__removed=False))

它给了我以下错误:

'WhereNode' object has no attribute 'output_field'

这只是 django 在错误页面上输出的一小部分,所以如果还不够,请让我知道我的问题中还需要包含什么。

我试图在这里和那里包含或(正确导入)之output_field类的选项,但出现了一些我没有在此处提供的错误,因为我认为这些操作毫无意义。models.IntegerField()models.FloatField()

我正在使用 Django 2.0.3

4

1 回答 1

27

你的语法错误在这里,

Feed.objects.filter(user=self.request.user)
            .annotate(Count('piece', filter=Q(piece__removed=False)))

过滤器需要在Countnot at应用annotate

来自 Django 文档的参考: https ://docs.djangoproject.com/en/2.1/topics/db/aggregation/#filtering-on-annotations

于 2018-04-04T06:09:15.793 回答