質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

4175閲覧

Djangoの検索機能で日付を範囲指定したい

Taka787

総合スコア23

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/02/17 06:38

DjangoのクラスベースビュのListViewで受注明細の一覧画面を作成していて、受注日で絞り込める機能を実装途中ですが、日付欄に全て入力した時は正常に絞り込めていますが、例えば受注日の開始日だけを入力してそれ以降の受注全て表示させようとすると、

ValidationError at /master_management/order_detail_list/ ["'' は無効な日付形式です。YYYY-MM-DD形式にしなければなりません。"]

と表示されてしまします。受注開始日、終了日を入力しない場合でもエラーが出ずに他の指定した条件(例えば受注No等)で絞り込めるようにしたいです。
いろいろ調べてみましたが解決できませんでした。

python

1view.py 2 3class OrderDetailList(ListView): 4 """受注明細一覧""" 5 template_name = 'master_management/order_detail_list.html' 6 context_object_name = 'order_detail_list' 7 model = Order 8 paginate_by = 100 # 1ページあたり100件表示 9 ordering = ['order_receive_date'] 10 11 def get_context_data(self, **kwargs): 12 context = super().get_context_data(**kwargs) 13 context['title'] = context['page_header'] = "受注明細一覧" 14 15 return context 16 17 def get_queryset(self): 18 q_order_receive_date_st = self.request.GET.get('order_receive_date_st') 19 q_order_receive_date_end = self.request.GET.get('order_receive_date_end') 20 q_receive_id = self.request.GET.get('receive_id') 21 q_order_id = self.request.GET.get('order_id') 22 q_customer_code = self.request.GET.get('customer_code') 23 q_customer = self.request.GET.get('customer') 24 q_scheduled_shipment_date_st = self.request.GET.get('scheduled_shipment_date_st') 25 q_scheduled_shipment_date_end = self.request.GET.get('scheduled_shipment_date_end') 26 q_status = self.request.GET.get('status') 27 28 if q_order_receive_date_st or q_order_receive_date_end or q_receive_id or q_order_id or q_customer_code \ 29 or q_customer or q_scheduled_shipment_date_st or q_scheduled_shipment_date_end or q_status: 30 object_list = Order.objects.filter( 31 Q(order_receive_date__gte=q_order_receive_date_st), Q(order_receive_date__lte=q_order_receive_date_end), 32 Q(receive_id__contains=q_receive_id), 33 Q(order_id__contains=q_order_id), Q(customer_code__contains=q_customer_code), 34 Q(customer__contains=q_customer), 35 Q(scheduled_shipment_date__gte=q_scheduled_shipment_date_st), 36Q(scheduled_shipment_date__lte=q_scheduled_shipment_date_end), 37 Q(status__contains=q_status) 38 ).distinct() 39 else: 40 object_list = Order.objects.all() 41 return object_list

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

q_order_receive_date_end(受注日終了?) が空の場合に
Order.objects.filterのパラメータに
Q(order_receive_date__lte=q_order_receive_date_end)
を指定しないようにすれば良いのでは?

投稿2020/02/17 09:11

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問