带有表单的基于Django类的视图ListView
主视图是一个简单的分页ListView,我想向其中添加搜索表单。
我认为这样可以解决问题:
class MyListView(ListView, FormView): form_class = MySearchForm
success_url = 'my-sucess-url'
model = MyModel
# ...
但是显然我错了..我在官方文档中找不到该怎么做的方法。
建议?
回答:
这些答案对引导我朝正确的方向大有帮助。谢谢大家
对于我的实现,我需要一个窗体视图,该窗体视图同时在get和post上返回ListView。我不喜欢重复get函数的内容,但需要进行一些更改。现在,self.form也可以从get_queryset获得该表单。
from django.http import Http404from django.utils.translation import ugettext as _
from django.views.generic.edit import FormMixin
from django.views.generic.list import ListView
class FormListView(FormMixin, ListView):
def get(self, request, *args, **kwargs):
# From ProcessFormMixin
form_class = self.get_form_class()
self.form = self.get_form(form_class)
# From BaseListView
self.object_list = self.get_queryset()
allow_empty = self.get_allow_empty()
if not allow_empty and len(self.object_list) == 0:
raise Http404(_(u"Empty list and '%(class_name)s.allow_empty' is False.")
% {'class_name': self.__class__.__name__})
context = self.get_context_data(object_list=self.object_list, form=self.form)
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
return self.get(request, *args, **kwargs)
class MyListView(FormListView):
form_class = MySearchForm
model = MyModel
# ...
以上是 带有表单的基于Django类的视图ListView 的全部内容, 来源链接: utcz.com/qa/426318.html