前提・実現したいこと
ドロップリストを選択させて検索ボタンを押すとドロップリストで選択した項目を
データベースから取得してデータを表示するという機能を作成しようと思っています。
form_validを使用して作成しようとしておりデータベースから取得した値を引数でテンプレートに渡したいのですが
どのようにすれば良いか教えて頂けますでしょうか。
試したこと
def postで処理していたときはrenderを使用して引数を渡していました。
def form_validでreturnでrenderを使用すると添付画像にあるように実行後form_classで設定したformが
有効にならなくなってしまいました。
form_validを調べると通常はreturnをsuper().form_valid(form)で返すようなのですが、これだと実行後も
テンプレートが崩れることはないのですが引数が渡せません。。(方法がわかりません)
get_context_dataのオーバーライドも試しはしたのですが上手くいきませんでした。。
該当のソースコード
views
1class IndexStock(LoginRequiredMixin,FormView): 2 3 template_name = 'StockManagement/index.html' 4 form_class = SelectForm 5 success_url = reverse_lazy('StockManegement_index') 6 7 8 def __init__(self): 9 self.params = { 10 'data': 'Obj', 11 } 12 13 def form_valid(self, form): 14 15 # ドロップリストから値を取得 16 RepositoryGroup = form.cleaned_data['Repository'] 17 18 # データベースから値を取得 19 ItemObject = Stock.objects.all().filter(Repository__RepositoryName=RepositoryGroup) 20 self.params['data'] = ItemObject 21 22 return render(self.request, 'StockManagement/index.html', self.params) # <- こっちは引数は渡せるがテンプレートが崩れる 23 #return super().form_valid(form) <- こっちだとテンプレートは正常だが引数の渡し方がわからない 24
補足情報
参考に教えて頂きたいのですが、今回の項目を選択後結果を表示のような構成画面でFormViewを使用しましたがFormViewだとページネーションを自分で記述しないといけません。
ListViewとFormMixinを使用すればよいかなとも思ったのですが、ページ表示時は検索ボタンを押すまで何も表示したくはなく(ListViewを使用すると表示時に設定したmodelが表示されてしまう)、get_querysetで別処理をした場合は結局paginate_byが使用できずに自分でページネーションを記述しないといけない(私の現在の知識での認識です)のでFormViewを選びました。
今回のような画面構成はよくあると思いますが皆様はどのような構成で作成されているか参考に教えて頂けますでしょうか。よろしくお願いいたします。
あなたの回答
tips
プレビュー