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

Den*_*nov 6 django django-models django-aggregation django-annotate django-2.0

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

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)
Run Code Online (Sandbox Code Playgroud)

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

在我看来,我需要获取经过身份验证的用户的所有供稿的queryset。批注应包含所有未删除的数量。

最初,Piece模型不包含removed字段,并且一切都可以与queryset一起运行,如下所示:

Feed.objects.filter(user=self.request.user).annotate(Count('piece'))
Run Code Online (Sandbox Code Playgroud)

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

Feed.objects.filter(user=self.request.user)
            .annotate(Count('piece'), filter=Q(piece__removed=False))
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误:

'WhereNode' object has no attribute 'output_field'
Run Code Online (Sandbox Code Playgroud)

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

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

我正在使用Django 2.0.3

Anu*_*dav 10

您的语法错误在这里,

Feed.objects.filter(user=self.request.user)
            .annotate(Count('piece', filter=Q(piece__removed=False)))
Run Code Online (Sandbox Code Playgroud)

过滤器需要应用在Count而不是annotate

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