我正在尝试查询和注释模型中的一些数据:
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)
在以下查询中未使用其他字段,因此在此跳过了它们。
在我看来,我需要获取经过身份验证的用户的所有供稿的queryset。批注应包含未删除的所有部分的数量。
最初,
Piece
模型不包含removed
字段,并且一切都可以与queryset一起运行,如下所示: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
最佳答案
您的语法错误在这里,
Feed.objects.filter(user=self.request.user)
.annotate(Count('piece', filter=Q(piece__removed=False)))
过滤器需要应用
Count
而不是annotate
。Django文档中的引用:
https://docs.djangoproject.com/en/2.1/topics/db/aggregation/#filtering-on-annotations
关于Django- 'WhereNode'对象没有属性 'output_field'错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49643502/