【发布时间】:2021-02-18 17:43:59
【问题描述】:
给定以下模型
class Pizza(Model):
pass
class Topping(Model):
on = ManyToMany(Pizza, related_name='on_pizza')
我正在尝试获取我的比萨饼和浇头数量,以及前 3 个其他比萨饼(就浇头数量而言排名第一) 最终结果应该是: 一个列表,其中包含当前的比萨饼、前 3 个比萨饼以及所有配料的数量。
所以现在我有一个披萨, 我有前 3 名的比萨饼(就浇头数量而言排名第一)
但我必须遍历顶级比萨来创建字典
for pizza in top_pizzas:
data.append({'pizza':pizza, 'num':pizza.tcount})
得到我正在做的其他顶级比萨:
top = Pizza.objects.all().exclude(pk=self.pk).annotate(tcount=Count('on_pizza')).order_by('-on_pizza')
这是在一个类函数中(在模型上)
我想要的是上面的查询,包括当前的披萨, 这是我尝试过的:
def compared_with_top(self):
top = Pizza.objects.all().exclude(pk=self.pk).annotate(tcount=Count('on_pizza')).order_by('-tcount')
me_with_top = Pizza.objects\
.filter(pk=self.pk)\
.annotate(tcount=Count('on_pizza'))\
.annotate(other_top_3=Subquery(top[:3]))
return me_with_top
这给了我一个错误:FieldError: Cannot resolve expression type, unknown output_field
我注意到子查询的所有示例都涉及 2 个单独的模型,并且使用 OuterRef,我的查询没有外部 ref(它的所有模型都是相同的)我只想将 2 个查询合二为一,如果这样的话.
上述错误指向“output_field”,但我找不到任何关于它应该是什么的信息。
编辑:有人建议我合并 2 个查询,这听起来不错,但随后我收到错误 DatabaseError: ORDER BY not allowed in subqueries of compound statements.
编辑#2: 上述错误只发生在 SQLite 上
【问题讨论】:
-
我仍然不完全清楚你想要什么。您能否提供一些示例场景以及预期结果应该是什么?
-
我添加了一些解释,基本上来自一个模型实例,我想获取一个查询集,其中包含当前比萨的浇头数量,以及前 3 个其他比萨饼及其浇头数量
-
但是您订购的比萨饼有多少浇头?只是为了确保,因为我觉得它的排序有点奇怪。
-
是的,前 3 个比萨饼是按浇头数量排序的前 3 个比萨饼
-
想象一个问题,有很多 cmets,我想要当前问题,它的 cmets 数量,与 cmets 最多的前 3 个问题相比,全部在 1 个查询中
标签: python sql django database