我正在尝试在查询集中获取一个取决于注释结果的字段。我尝试在带注释的查询集上使用额外的,这似乎不起作用。
假设我的模型如下所示:
class Foo(models.Model):
name = models.CharField(...)
class FooData(models.Model):
foo = models.ForeignKey(Foo)
sales = models.PositiveIntegerField()
items_sold = models.PositiveIntegerField()
我有一个 Foo 对象的查询集
some_foos = Foo.objects.filter()
我已经对其进行了注释以获取 FooData 的总和。
some_foos.object.annotate(
total_sales=Sum("foodata__sales"),
total_items_sold=Sum("foodata__items_sold")
)
现在我想获得我尝试使用 .extra 的平均价格。它们似乎不起作用。(我查看了生成的 sql 查询)。
#Wont work, fields not defined yet.
some_foos.object.annotate(
total_sales=Sum("foodata__sales"),
total_items_sold=Sum("foodata__items_sold")
).extra(select={'price_avg': "total_sales/total_items_sold"})
#Wont work, this adds an extra clause in group by
price_avg = "SUM(appname_foodata.sales)/SUM(appname_foodata.items_sold)"
some_foos.object.annotate(
total_sales=Sum("foodata__sales"),
total_items_sold=Sum("foodata__items_sold")
)