如何将一个Django表单添加到wagtail块

时间:2017-09-26 21:07:32

标签: python django wagtail

我想在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带走了一个视图的想法所以我不知道它是否可能这样做。任何帮助将不胜感激。

1 个答案:

答案 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。我已经在上面的代码中使用了这个,重定向到了'感谢'子页面。