仅为每个唯一外键选择最新结果

时间:2013-05-12 19:52:16

标签: django orm django-queryset

class Price(models.Model):
    product = models.ForeignKey(Product)
    date = models.DateField()
    amount = DecimalField()

拥有许多日期(日期可能是未来时间)许多产品的存储金额的模型。

  

示例:
在1.01.2013上 - 产品1金额10 $(即此值   从1.01到11.01)
在2013年1月12日 - 产品1金额12 $   10.05.2013 - 产品1金额17 $
于2013年6月11日 - 产品1金额14 $

     

于18.02.2013 - 产品2金额3 $
于2013年6月12日 - 产品2   金额15美元

     

于2013年4月25日 - 产品3金额11 $
于2013年6月17日 - 产品3   金额13 $

DB Backend-MySQL

如何为每个产品选择实际金额(以及此金额输入的日期),其中日期< = current_date和用户输入范围内的金额值
对于前者日期为2013年5月14日,金额范围为10-20美元 需要在queryset中只有两个对象的结果:

Product1   10.05.2013  17$
Product3   25.04.2013  11$ 

UPD。感兴趣的最优解决方案,不需要很多SQL查询,也不需要在代码中评估所有记录的循环。

1 个答案:

答案 0 :(得分:2)

您可以对日期字段使用lt(小于)和gt(大于)查询集 Django文档:https://docs.djangoproject.com/en/dev/ref/models/querysets/#gt

from datetime import date

products = Product.objects.filter(price__date__lte=date.today(),\
                                  price__amount__range=(start, end).distinct()