datefield
というモデルがあります。私は今週(月曜日に開始)を含むそのモデルのクエリセットを取得しようとしています。ISOの週番号によるDjangoクエリーセットのフィルタリング
だからDjango datefield
にはdatetime.date
というモデルが含まれているので、.isocalendar()
を使ってフィルタリングすると仮定しました。論理的には、現在の週の日までに余分な比較や計算をすることなく、正確に私が望むものです。
それでは、私は基本的にやりたいことは、このロジックで動作するように力.filter
文です:
if model.date.isocalendar()[2] == datetime.date.today().isocalendar()[2]
...
フィルタステートメントの内側にそれを書くことしかし、どうやって? .filter(model__date__isocalendar=datetime.date.today().isocalendar())
は間違った結果を出すでしょう(今週ではなく今日と比較して同じです)。私は他の曜日オプションを気づいていない掘り真http://docs.python.org/library/datetime.htmlとして
...ドキュメントから
注:
date.isocalendar()3要素のタプルを返し、(ISO年、ISO週番号、ISO 平日)。
更新:
私は範囲を使用しての溶液を嫌い、まだそれが最良の選択肢ですが。 私の場合は、今週の試合を探しているので、週の始まりを示す変数を作成して、それよりも大きいか等しい値を表示します。週数を指定する場合は、両端が必要です。
today = datetime.date.today()
monday = today - datetime.timedelta(days=today.weekday())
... \
.filter(date__gte=monday)
を次のように
は今が、あなたがフォールバックすることができますORMサポート場合、私は知らないクエリを実行します – dm03514
私はこのオプションdm03514を認識していますが、自分でフィルタを作成したいと思います。これもオプションですが、拡張せずにDjangoのデフォルトアクションを使用してこれを実現することが可能かどうかを知りたいと思っています。 – JackLeo
btw便利なpython dateutilモジュールがありますhttp://pypi.python.org/pypi/python-dateutil – aisbaa