Django - 'WhereNode'对象没有属性'output_field'错误

时间:2018-04-04 05:34:42

标签: django django-models django-2.0 django-aggregation django-annotate

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

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'))

但后来我将字段removed添加到Piece模型,只需计算未删除的部分

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

它给了我以下错误:

'WhereNode' object has no attribute 'output_field'

这只是django在错误页面上输出的一小部分,所以如果还不够,请告诉我在我的问题中还需要包含哪些内容。

我尝试在output_fieldmodels.IntegerField()(正确导入)等选项中包含models.FloatField(),但我遇到了一些错误,我在此不提供这些错误因为我认为这些操作没有感。

我正在使用Django 2.0.3

1 个答案:

答案 0 :(得分:5)

你的语法错误就在这里,

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

过滤器需要在Count而不是annotate处应用。参考:https://docs.djangoproject.com/en/2.0/topics/db/aggregation/#cheat-sheet