2017-09-26 20 views
1

wagtailブロックにフォームを追加したいと思います。フォームは、送信ボタン付きの単純なドロップダウン選択です。wagtailブロックにDjangoフォームを追加するには

class ExampleForm(forms.Form): 
    example = forms.ModelChoiceField(queryset=Example.objects.all()) 

その後セキレイブロックは(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 

しかし、どのようにフォームの提出、すべてをhabdleのですか? wagtailはビューのアイデアを取り除くので、私はそれが可能かどうかわかりません。どんな助けでも大歓迎です。

+0

編集インターフェイス内のStreamfieldブロック内に「送信するフォーム」を追加しますか?または、Streamfieldから既存のフォームを選択し、これをビュー(ライブページ)に送信可能なフォームとして表示したいのですか? –

答えて

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を提供してページタイプのため、セキレイはすでにForm builderのcontribモジュールを持っています。上記のコードは主にtaken from thereです。

RoutablePageMixinと関連性があり、異なるURLでページモデルに対して複数の「ビュー」を持つことができます。上記のコードでは、「感謝」サブページへのリダイレクトを使用しています。

+0

私はちょうどあなたが 'ブロック'にそれを追加したいと気付いたので、あなたはStreamfieldのブロックについて話していると思います。これはフォームビルダーを使用しないことになります。 – nimasmi

関連する問題