我在我的models.py下面的模型结构,项目和优惠:Django的“额外”的查询
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查询以获得每个项目下面:
- 的电流(活性)的总提供此项目
- 已针对此项目满足由优惠(靶的百分比,即/ TARGET_AMOUNT * 100 [由式(1)的总] )
我一直在试图与“额外”来实现这一如下(使用的是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)'
}
)
现在第一选择(total_amount
)是否正常工作,并返回我的期望,但percentage_met
始终为0任何人都可以帮我解答为什么?
编辑:应该提到,我希望能够在ORDER_BY percentage_met
这是真实的,但麻烦的是我想ORDER_BY percentage_met ..只是尝试这样做,我不似乎无法order_by财产:/ – JimJay
好吧,不要担心..已经计算出如何使用sorted()按照http://stackoverflow.com/questions/981375/using-a- django-custom-model-method-property-in-order- – JimJay