我有以下型号:
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工作日功能,但它只能在特定日期(没有范围)工作,所以我想知道这种情况是否有更简单的方法。
答案 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])
date_from
和date_to
的差异> 4然后肯定会有周五,周六或周日。date_from
是星期五,星期六还是星期日date_to
是星期五,或星期六或星期日