我正在尝试查询和注释我的模型中的一些数据:
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_field
或models.IntegerField()
(正确导入)等选项中包含models.FloatField()
,但我遇到了一些错误,我在此不提供这些错误因为我认为这些操作没有感。
我正在使用Django 2.0.3
答案 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