• 16 października 2024 13:24

    Chciałbym użyć formset w generic view, wiekszość dokumentacji django w przykładach podaje stara wersje czyli użycie w function views. To nie jest problem bo można formset użyć jak zwykłego forma np. z FormView. Problemem jest jak przypisać szablon, a właściwie 2 szablony, których ma używać formset do renderowania poszczególnych form.
    template_name definiowany w widoku określa główny szablon dla formset'a.

    Nie wiem jak ustawić szablon dla poszczególnych form?
    Wygląda jak by trzeba było napisać customowy FormSet w oparciu o BaseFormSet albo renderer.

  • 26 października 2024 13:57

    Nie trzeba nic customowego pisać, najprościej jest ustawić template_name w klasie form, przykład:

    from django import forms
    from django.forms import formset_factory
    
    class MyForm(forms.Form):
        template_name='my_form.html'  # template dla pojedynczego formularza - sub-template
    
    
    MyFormSet = formset_factory(MyForm)
    
    # a w widoku
    from django.views.generic.edit import FormView
    class MyView(FormView):
        template_name = 'my_formset.html'  # glowny template dla calego formseta
        form_class = MyFormSet
    

    Wtedy jeśli w szablonie my_formset.html użyjemy

    {{ form.management_form }}
    {% for f in form %}
    {{ f }}
    {% endfor %}
    

    to zostaną wyrenderowane formularze z użyciem szablonu my_form.html. Trzeba pamiętać że w tym przypadku w form jest formset a nie pojedynczy formularz.