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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。