-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 月 9 日は金曜日で、取引の期間は 3 です。したがって、この場合、金曜日、土曜日、日曜日が有効な週末になります。

ID3: 2013-01-26 は土曜日で、ディールのデュレーションは 2 です。これも有効です。

--編集--わかりました、わかりにくかっ
たらごめんなさい。上記の週末ルールに基づいて目的地の取引をフィルタリングする必要があります。モデル(DateField)からpython(datetime)にdate_fromを取得し、date_toまで繰り返し、weekday()関数を使用して金曜日か土曜日かを確認することでそれを行うことを考えていました。

私はdjangoの平日機能を認識していますが、特定の日付(範囲なし)でのみ機能するため、このシナリオにより簡単なアプローチがあるかどうかを知りたいです.

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の場合
  • そして、との差が4より大きい場合は、間違いなく金曜日、土曜日、または日曜日のいずれかになりますdate_fromdate_to
  • date_fromまたは、金曜日か土曜日か日曜日かを確認します
  • またはdate_to金曜日、または土曜日または日曜日です
于 2013-01-10T23:16:11.740 に答える