前提・実現したいこと
検索条件を入力して結果を表示する画面を作成しています。
「検索」ボタンを押すと検索結果を表示するのですが、ボタンを押したと同時に検索入力のフォームがクリアされてしまいます。
「検索」ボタンを押しても検索入力フォームがクリアされないようにしたいです。
(添付画像では入力したコードがクリアされてしまっています。
開始日、終了日はdefaultで今日の日付を設定しているのですが、日付を変更したときは変更日付で値が残ってほしいです。)
よろしくお願いいたします。
発生している問題・エラーメッセージ
検索ボタンだけでなく、DeleteViewで作成した詳細画面から戻るときも条件がクリアされてしまっています。
該当のソースコード
forms
1# 日付選択(開始日) 2class DateFormStart(forms.ModelForm): 3 4 class Meta: 5 model = DateModeStart 6 fields = '__all__' 7 widgets = { 8 'date_field_start': AdminDateWidget(), # インポートしたウィジェットを使う指示 9 } 10 11# 日付選択(終了日) 12class DateFormEnd(forms.ModelForm): 13 14 class Meta: 15 model = DateModeEnd 16 fields = '__all__' 17 widgets = { 18 'date_field_end': AdminDateWidget(), # インポートしたウィジェットを使う指示 19 } 20class DropForm(forms.Form): 21 22 # コード 23 JanCode = forms.IntegerField(label='コード',required=False,min_value=0,max_value=9999999999999, \ 24 widget=forms.NumberInput(attrs={'class':'form-control'}))
models
1# フォーム設定(日付開始日) 2class DateModeStart(models.Model): 3 4 date_field_start = models.DateField( 5 verbose_name='開始日', 6 blank=True, 7 null=True, 8 default=datetime.now, 9 ) 10 11 def __str__(self): 12 return self.date_field_start 13 14# フォーム設定(日付終了日) 15class DateModeEnd(models.Model): 16 17 date_field_end = models.DateField( 18 verbose_name='終了日', 19 blank=True, 20 null=True, 21 default=datetime.now, 22 ) 23 24 def __str__(self): 25 return self.date_field_end
views
1class IndexViewBacrex(LoginRequiredMixin,ListView,FormMixin): 2 3 # ListView 4 template_name = 'OrderProcess/index.html' 5 model = Order 6 context_object_name = 'data' # templateに渡す名前 7 paginate_by = 10 8 9 # FormMixin 10 form_class = SelectEdiForm 11 success_url = reverse_lazy('orderprocess_bacrex_index') 12 13 14 # GETオーバーライド 15 def get_context_data(self, **kwargs): 16 context = super().get_context_data(**kwargs) 17 context['date_form_start'] = DateFormStart 18 context['date_form_end'] = DateFormEnd 19 context['drop_form'] = DropForm 20 return context 21 22 23 # 検索機能 24 def get_queryset(self): 25 queryset = Order.objects 26 27 if "search" in self.request.GET: 28 # 日付取込 29 dateStart = self.request.GET.get('date_field_start') 30 dateEnd = self.request.GET.get('date_field_end') 31 # コード 32 jancode = self.request.GET.get('JanCode') 33 34 # 日付検索 35 if dateStart and dateEnd: 36 print("開始~終了") 37 query = Q(OrderProcessingDate__gte = dateStart, OrderProcessingDate__lte = dateEnd) 38 elif not dateStart and dateEnd: 39 print("~終了") 40 query = Q(OrderProcessingDate__lte = dateEnd) 41 elif dateStart and not dateEnd: 42 print("開始~") 43 query = Q(OrderProcessingDate__gte = dateStart) 44 elif not dateStart and not dateEnd: 45 print("~") 46 query = Q() 47 48 # コード 49 if jancode: 50 print("コード") 51 query &= Q(JANCode__contains = jancode) 52 53 54 data = queryset.filter(query) 55 56 else: 57 print("デフォルト") 58 data = queryset.filter(OrderProcessingDate = datetime.date.today()) 59 60 return data
HTML
1<!--検索条件--> 2 <form action="" method="get"> 3 <!--日付検索--> 4 <li class="list-group-item"> 5 <div class="row"> 6 <div class="col-12"> 7 <div class="row"> 8 <div class="col-3"> 9 <input type="hidden" name="form_type" value="__date_form_start__"> 10 {{ date_form_start }} 11 </div> 12 <div class="col-3"> 13 <input type="hidden" name="form_type" value="__date_form_end__"> 14 {{ date_form_end }} 15 </div> 16 </div> 17 </div> 18 </div> 19 <br> 20 <!--検索--> 21 <div class="row"> 22 <div class="col-12"> 23 <div class="row"> 24 <div class="col-2"> 25 <!--JANコード--> 26 {{ drop_form.JanCode.label}} 27 {{ drop_form.JanCode}} 28 </div> 29 </div> 30 </div> 31 </div> 32 </li> 33 34 <button class="btn btn-primary mt-1" type="submit" name="search">検 索</button> 35 36 </form>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。