注釈の結果に依存するクエリセットでフィールドを取得しようとしています。注釈付きクエリセットで extra を使用しようとしましたが、うまくいかないようです。
私のモデルが次のようになっているとしましょう:
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")
)