私のmodels.pyには、アイテムとオファーを含む次のモデル構造があります。
class Item(models.Model):
STATUS_CHOICES = (
('A', 'Active'),
('C', 'Cancelled'),
)
status = models.CharField(max_length=11, choices=STATUS_CHOICES)
target_amount = models.PositiveIntegerField()
...
class Offer(models.Model)
STATUS_CHOICES = (
('A', 'Active'),
('C', 'Cancelled'),
)
status = models.CharField(max_length=11, choices=STATUS_CHOICES)
amount = models.PositiveIntegerField()
item = models.ForeignKey(Item)
...
各アイテムについて以下を取得するために、views.py にクエリを記述したいと考えています。
- このアイテムの現在の (アクティブな) オファーの合計
- このアイテムのオファーによって達成された目標の割合 (つまり、[(1) の合計]/target_amount * 100)
次のように「追加」でこれを達成しようとしています(postgresを使用):
items = Item.objects.filter(status='A').extra(
select={
'total_amount' : 'select coalesce(sum(amount),0) from myapp_offer where myapp_offer.item_id = myapp_item.id and myapp_offer.status = \'A\'',
'percentage_met' : '(((select coalesce(sum(amount),0) from myapp_offer where myapp_offer.item_id = myapp_item.id and myapp_offer.status = \'A\') / target_amount) * 100)'
}
)
最初の select ( total_amount
) が正しく機能し、期待どおりの結果が返されるようになりましたが、percentage_met
常に 0 です。理由について誰か助けてもらえますか?
編集:percent_metでorder_byできるようにしたいと述べたはずです