我的 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。谁能帮我解释为什么?
编辑:应该提到我希望能够 order_by the percent_met