web-dev-qa-db-ja.com

django日付フィルターgteおよびlte

私は小さな予約システムを構築している特定のパラメーターセット内のデータを見つける必要があります。これにより、ユーザーは小さなサファリ旅行で予約できる車両を確認できます。

システムには、以前に入力されたか、クライアントによって以前に行われた予約があります。

予約がpickup_date = 2011-03-01dropoff_date = 2011-03-15であり、pickup=2011-03-09dropoff=2011-03-14を使用してクエリを以下のように実行すると、結果が返されず、予約がその時間枠が作られました。

views.py

def dates(request, template_name='groups/_dates.html'):
    pickup=request.GET.get('pickup','None');
    dropoff=request.GET.get('dropoff','None');
    order = Order.objects.filter(pick_up__lte=pickup).filter(drop_off__gte=dropoff)

    context = {'order':order,}

    return render_to_response(template_name,context,
        context_instance=RequestContext(request))

これを行う方法に関する提案はありますか?または、このクエリを実行する別の方法を検討する必要がありますか?

16
ApPeL

生の文字列をクエリセットに渡すのが正しい形式ではないため、文字列を日時オブジェクトに変換してみてください。

後で、範囲ルックアップを使用してみることができます。一部のDBエンジンではより効率的で、読み取りとコーディングがより簡単です。

from Django.db.models import Q

start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
orders = Order.objects.filter(drop_off__gte=start_date, pick_up__lte=end_date)
# Or maybe better
orders = Order.objects.filter(Q(drop_off__gte=start_date), Q(pick_up__lte=end_date))
24
Mario César

あなたはこれを試すことができます:

order = Order.objects.filter(pick_up**__date__**lte=pickup).filter(drop_off**__date__**gte=dropoff)

https://docs.djangoproject.com/fr/2.0/ref/models/querysets/#date

1
Michel MARTIN