-2

我有以下型号:

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。也是有效的。

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

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

4

1 回答 1

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是星期五、星期六或星期日
于 2013-01-10T23:16:11.740 回答