Djangoクラスベースのビューで2つのフォームを処理しようとしています。このサイトには、ListViewのリスト結果を絞り込むためのform
(に基づく)というフォームと、(に基づく)2番目のフォームが含まれています。GET
status_form
POST
ListViewはアイテムのリストを返すため、両方のフォームが必要です。Form
ユーザーが選択肢を制限しstatus_forms
、モーダルフォームを介して誤ったアイテムにフラグを立てることができます(したがって、同じテンプレート内にある必要があります)。
私の問題は、メソッドが付属していListView
ないことですが、付属しています。私のクラスは両方のクラスを継承していますが、クラスを実行するとエラーメッセージが表示されます。post
FormView
List
属性エラー:「リスト」オブジェクトに属性「status_form」がありません
2番目のフォームが?を介して処理できるように実装を変更するにはどうすればよいpost method
ですか?
class List(PaginationMixin, ListView, FormMixin):
model = ListModel
context_object_name = 'list_objects'
template_name = 'pages/list.html'
paginate_by = 10 #how may items per page
def get(self, request, *args, **kwargs):
self.form = ListSearchForm(self.request.GET or None,)
return super(List, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.status_form = StatusForm(self.request.POST or None)
if self.status_form.is_valid():
...
else:
return super(List, self).post(request, *args, **kwargs)
def get_queryset(self):
# define the queryset
...
# when done, pass to object_list
return object_list
def get_context_data(self, **kwargs):
context = super(List, self).get_context_data(**kwargs)
context.update(**kwargs)
context['form'] = self.form
context['status_form'] = self.status_form # Django is complaining that status_form is not existing, result since the post method is not executed
return context