Skip to content

django multiform template view for multiple forms handling in one view

License

Notifications You must be signed in to change notification settings

bukdjango/multiform

Folders and files

NameName
Last commit message
Last commit date

Latest commit

34aff9b · Dec 14, 2022

History

10 Commits
Jul 23, 2020
Jul 15, 2020
Jul 15, 2020
Jul 14, 2020
Jul 14, 2020
Jul 14, 2020
Jul 14, 2020
Jul 14, 2020
Jul 14, 2020
Jul 23, 2020
Jul 23, 2020
Jul 14, 2020
Jul 14, 2020
Jul 14, 2020
Jul 14, 2020
Dec 14, 2022

Repository files navigation

multiform

Multiple forms processing in one View.

from bukdjango_multiform.views import MultiFormTemplateView

from django.http import HttpResponse, HttpResponseForbidden
from .forms import Form1, Form2
    

def logged_in(request, *args, **kwargs):
    if not request.user.is_authenticated:
        return HttpResponseForbidden(b'loginplease')


class MyMultiFormTemplateView(MultiFormTemplateView):
    template_name = 'index.html'
    multiform_field_name = 'html_field_name'
    multiforms = {
        # template context name for `Form`
        'form1_ctx': {
            'class': Form1,
            # pass view attr as keyword argument to form
            'attrs': ('request',),
            # pass view kwargs as keyword argument to form
            'kwargs': ('some_kwarg',),
        },
        'form2_ctx': {
            'class': Form2,
            # check if form can be processed
            'checks': (logged_in,),
            # save form if valid
            'save': True,
        }
    }
    
    # pass additional kwargs to `Form1`
    def get_kwargs_form1_ctx(self, **kwargs):
        kwargs.update({
            'request': None,
            'some_kwarg': None,
        })
        return kwargs
    
    def handle_valid_form2_ctx(self, form):
        return HttpResponse(b'VALID!form2_ctx')

    def handle_invalid_form2_ctx(self, form):
        return HttpResponse(b'INVALID!form2_ctx')

    def handle_valid_form1_ctx(self, form):
        return HttpResponse(b'VALID!form1_ctx')

    def handle_invalid_form1_ctx(self, form):
        return HttpResponse(b'INVALID!form1_ctx')


    class MyMultiFormTemplateView2(MyMultiFormTemplateView):
        template_name = 'index.html'
        # when subclassing all forms are collected
        # similiar to how `django.forms.Form` fields work
        multiforms = {
            'form4_ctx': {
                'class': Form2,
            },
            # delete form` from context
            'form2_ctx': None,
        }