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

15

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

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

但是后来我给Piece模型增加了字段removed,并且需要计算没有被标记为已移除的棋子数量:

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版本。


1
你的语法错误在这里,Feed.objects.filter(user=self.request.user).annotate(Count('piece', filter=Q(piece__removed=False))) - Anup Yadav
非常感谢!我到处找了,但没有检查那些括号。我相信你的评论应该是一个答案。 - Den Kasyanov
我将此作为答案添加,这样您就可以接受了。 - Anup Yadav
1个回答

34

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接