2009-09-07 87 views
2
#model 
class Promotion(models.Model): 
    name = models.CharField(max_length=200) 
    start_date = models.DateTimeField() 
    end_date = models.DateTimeField() 


#view 
def promo_search(request): 
    ... 
    results = Promotion.objects.filter(start_date__gte=start_date).filter(end_date__lte=end_date) 
    ... 

(上面显然不会,我只是用它来工作,以帮助 的代码说明我的问题。)日期范围头痛

我要显示的开始日期之间的所有活动促销结束日期为 。

因此,如果从01/12/09到01/02/09的搜索从01/01/09开始并于2009年1月30日结束, 搜索仍会返回结果。如果他们从日期范围内搜索,例如 02/01/09 - 03/01/09 他们会得到相同的结果。

是否有一些神奇的Django的方式实现这一点,而不是每天循环 ?

回答

1

您有四个日期需要考虑:start_search,end_search,start_promoend_promo。您正在寻找促销活动的地方start_promo <= end_searchend_promo >= start_search

results = Promotion.objects.\ 
      filter(start_date__lte=end_date).\ 
      filter(end_date__gte=start_date) 
+0

谢谢,现在工作:) – 2009-09-07 14:36:29