如果周末在范围之间,Django过滤

时间:2013-01-10 20:17:12

标签: python django

我有以下型号:

class Destination_Deal(models.Model):
    name = models.CharField(_("Nombre"),max_length=200)
    duration = models.IntegerField(_(u"Días"))

class Departure_Date(models.Model):
    date_from= models.DateField(_('Desde'))    
    date_to= models.DateField(_('Hasta'))
    destination_deal = models.ForeignKey(Destination_Deal,verbose_name = _("Oferta de Destino"))

我想过滤适合周末旅行的目的地优惠。这意味着:

出发日=周五或周六
返回日=周日。因此,如果出发日是星期五或星期六,则持续时间必须为3或2。

示例

Destination_Deal
id  name        duration
1   Deal1       3
2   Deal2       5
3   Deal3       2
4   Deal4       7


Departure_Date
id  date_from   date_to     destination_deal_id
1   2012-11-05  2012-11-15  1
2   2012-11-01  2012-12-16  2
3   2013-01-21  2013-01-27  3
4   2013-01-14  2013-01-18  3
5   2013-01-04  2013-01-11  4

期望的结果
ID1: 2012-11-09是星期五,交易的持续时间是3.所以在这种情况下,周五,周六和周日符合有效的周末。

ID3: 2013-01-26是星期六,交易的持续时间是2.也是有效的。

- 编辑 -
好的,对不起,如果我不清楚的话。我需要根据上面的周末规则过滤目的地交易。我想通过将date_from从模型(DateField)获取到python(datetime)来实现它,迭代它直到date_to并使用weekday()函数来检查它是星期五还是星期六。

我知道django工作日功能,但它只能在特定日期(没有范围)工作,所以我想知道这种情况是否有更简单的方法。

1 个答案:

答案 0 :(得分:0)

where = '(deparure_date__date_from - deparure_date__date_to) > 4 || \
         DAYOFWEEK(deparure_date__date_from) IN (1, 6, 7) || \
         DAYOFWEEK(deparure_date__date_to) IN (1, 6, 7)'

Destination_Deal.objects.filter(duration__in=[1, 2, 3]) \
                        .extra(where=[where])
  • 如果持续时间为1,2,3
  • 如果date_fromdate_to的差异> 4然后肯定会有周五,周六或周日。
  • 或检查date_from是星期五,星期六还是星期日
  • date_to是星期五,或星期六或星期日