【发布时间】:2018-01-16 23:23:36
【问题描述】:
我有 4 个这样的模型
class Site(models.Model):
name = models.CharField(max_length=200)
def get_lowest_price(self, mm_date):
'''This method returns lowest product price on a site at a particular date'''
class Category(models.Model):
name = models.CharField(max_length=200)
site = models.ForeignKey(Site)
class Product(models.Model):
name = models.CharField(max_length=200)
category = models.ForeignKey(Category)
class Price(models.Model):
date = models.DateField()
price = models.IntegerField()
product = models.ForeignKey(Product)
这里每个都有很多类别,每个类别都有很多产品。现在产品价格每天都在变化,因此价格模型将保留产品价格和日期。
我的问题是我想要按价格范围筛选网站列表。此价格范围将取决于 get_lowest_price 方法,并且可以按 Min 到 Max 和 Max 到 Min 排序。我已经使用 lambda 表达式来做到这一点,但我认为这不合适
sorted(Site.objects.all(), key=lambda x: x.get_lowest_price(the_date))
我也可以通过运行循环来获得价格范围内的所有网站,但这也不是一个好主意。请帮助我的人以正确的方式进行查询。
如果您仍然需要更清楚地了解该问题,请参阅“Ishtiaque Khan”的第一条评论,他的假设是 100% 正确的。
*在这些模型中,写入频率低,读取频率高。
【问题讨论】:
-
你的业务逻辑不清楚。您似乎正在尝试查找按 V 排序的唯一站点列表,其中 V 是该站点中所有产品在给定日期的最低价格。如果这是业务逻辑,那么当前的方法不是最优的。如果您的日期范围在几年内,并且您的数据库是静态数据库,或者数据条目非常少,那么对每个新条目的每个日期的最低 V 进行急切评估似乎是个好主意。所以预先计算/急切的计算可能是要走的路。
标签: sql django postgresql django-models django-queryset