我想在wagtail块中添加一个表单。表单是一个简单的下拉选项,带有提交按钮。
class ExampleForm(forms.Form):
example = forms.ModelChoiceField(queryset=Example.objects.all())
然后wagtail块是一个用get_context()
生成的简单表# this is basically the view rendering
def get_context(self, request, **kwargs):
context = super().get_context(request, **kwargs)
# do some queries and populate tables in template.
context['example_data'] = SomeObject.objects.all()
# here is where I want to add the form.
this_form = SomeForm()
context['this_form'] = this_form
return context
但是你如何处理表单提交和一切?看来wagtail带走了一个视图的想法所以我不知道它是否可能这样做。任何帮助将不胜感激。
答案 0 :(得分:0)
出于实际目的,最接近视图的是serve()
method。在那里你可以处理if request.method == "POST":
等等。也许:
def serve(self, request):
if request.method == 'POST':
form = MyFormClass(request.POST)
if form.is_valid():
# process the form here...
return HttpResponseRedirect(self.reverse_subpage('thanks'))
else:
form = MyFormClass()
context = self.get_context(request)
context['form'] = form
return render(
request,
self.get_template(request),
context
)
或者,对于记录简单表单提交的页面类型,并为编辑者提供用于修改表单的UI,Wagtail已经拥有Form builder contrib模块。上面的代码主要是taken from there。
同样可能相关的是RoutablePageMixin
,它允许您拥有多个视图'对于页面模型,在不同的URL。我已经在上面的代码中使用了这个,重定向到了'感谢'子页面。