Bagaimana Anda menambahkan formulir Django ke blok wagtail

Saya ingin menambahkan formulir ke blok wagtail. Formulirnya adalah pilihan drop down sederhana dengan tombol kirim.

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

Maka blok wagtail adalah tabel sederhana yang dihasilkan dengan 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

Tapi bagaimana Anda menangani pengiriman formulir dan segalanya? Tampaknya wagtail menghilangkan gagasan tentang pandangan jadi saya tidak tahu apakah mungkin untuk melakukan ini. Bantuan apa pun akan sangat dihargai.


person goosefrumps    schedule 26.09.2017    source sumber
comment
Apakah Anda ingin menambahkan 'formulir yang dikirimkan' dalam Blok Streamfield dalam antarmuka pengeditan? Atau apakah Anda ingin memilih formulir yang sudah ada dari Streamfield dan menyajikannya sebagai formulir yang dapat dikirimkan pada tampilan (halaman langsung)?   -  person LB Ben Johnston    schedule 13.11.2017


Jawaban (1)


Hal yang paling dekat dengan tampilan untuk tujuan praktis adalah serve() metode. Di sana Anda dapat menangani if request.method == "POST": dan seterusnya. Mungkin:

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
    )

Alternatifnya, untuk jenis halaman yang mencatat pengiriman formulir sederhana dan menyediakan UI bagi editor untuk mengubah formulir, Wagtail sudah memiliki Modul kontribusi pembuat formulir. Kode di atas sebagian besar diambil dari sana .

Yang mungkin juga relevan adalah RoutablePageMixin< /a>, yang memungkinkan Anda memiliki beberapa 'tampilan' untuk model halaman, pada URL berbeda. Saya telah menggunakan ini dalam kode di atas dengan pengalihan ke subhalaman 'terima kasih'.

person nimasmi    schedule 28.09.2017
comment
Saya baru saja menyadari bahwa Anda ingin menambahkannya ke 'blok', jadi saya kira Anda sedang berbicara tentang blok Streamfield. Ini mengesampingkan penggunaan pembuat Formulir. - person nimasmi; 02.10.2017