我通过乘以两个字段来计算项目的size
。
Size = order_size_weight x requested_selling_price
我有两个方法可以做到这一点。
return float(self.order_size_weight) * float(self.requested_selling_price)
return self.extra(
select={"priority": "COALESCE(bm_rank, sales_rank, id)",
"size": "order_size_weight*requested_selling_price", # for oder_by size.
})
当我使用second
方法时,我无法使用Annotate
聚合或获取所有大小的总和。
calculate Size
extra select
我能够在使用注释之前使用select extra
来解决第二个问题,这有助于解决问题。
答案 0 :(得分:0)
虽然对于计算字段仍然可以同时执行annotate
和aggregate
,但如果您还要对数据库性能进行排序(并且没有计算结果的索引)。
对于这些情况,我建议使用enter link description here(或类似的东西)。您可以使用回调函数将结果存储在数据库中:http://initcrash.github.io/django-denorm/tutorial.html#creating-denormalized-fields-using-callback-functions
class SomeModel(models.Model):
order_size_weight = models.IntegerField()
requested_selling_price = models.IntegerField()
@denormalized(models.IntegerField)
def calculate_size(self):
return float(self.order_size_weight) * float(self.requested_selling_price)