Django ORM Model Property VS Select Extra哪个是b

2024-04-25 12:48:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过将两个字段相乘来计算项的size。你知道吗

Size = order_size_weight x requested_selling_price

我有两种方法。你知道吗

1。模型属性

return float(self.order_size_weight) * float(self.requested_selling_price)

2。修改查询集

return self.extra(
                select={"priority": "COALESCE(bm_rank, sales_rank, id)",
        "size": "order_size_weight*requested_selling_price",  # for oder_by size.

})

问题

当我使用second方法时,我不能使用Annotate来聚合或求所有大小的和。你知道吗

问题

  1. 实现calculate Size的最佳/快速方法是什么
  2. 我可以在使用extra select之后使用Annotate吗

编辑

解决方案2

在使用annotate帮助解决问题之前,我可以使用select extra解决第二个问题。你知道吗


Tags: 方法selfsizereturnorderfloatselectextra
1条回答
网友
1楼 · 发布于 2024-04-25 12:48:49

虽然仍然可以对计算字段同时执行annotateaggregate,但如果您还想对其进行排序(并且没有计算结果的索引),就数据库性能而言,不建议这样做。你知道吗

对于这样的情况,我建议使用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)

相关问题 更多 >