How to style each form in modelformset_factory

383 Views Asked by At

I've trying to style each form in modelformset_factory. But I couldn't do even if I used a table, its unable to save the last (empty form)

Here is my view function

from django.shortcuts import render
from django.forms import modelformset_factory
from .models import Offer

def offer_forms(request):
    OfferFormSet = modelformset_factory(Offer, fields=('name', 'url', 'image', 'active'))
    formset = OfferFormSet()

    if request.method == 'POST':
        formset = OfferFormSet(request.POST, request.FILES)
        if formset.is_valid():
            instances = formset.save(commit=False)

            for form in instances:
                form.save()

    formset = OfferFormSet()
    context = {
        'formset': formset,
    }
    return render(request, 'offers.html', context)

Here is my Html file:

{% extends 'base.html' %}
<style media="screen">
*{
    box-sizing: border-box;
}
</style>
{% block content %}
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ formset.management_form }}
        <table class="table table-stripped">
        {% for form in formset %}
        <tr>
            <td>
                {{ form }}
            </td>
        </tr>
        <td>
            <input type="submit" value="Submit" class="btn btn-sm btn-primary">
        </td>
        {% endfor %}
        </table>
      </form>
{% endblock content %}
1

There are 1 best solutions below

0
On BEST ANSWER

modelformset_factory accepts form as kwargs, so you can style a django.forms.ModelForm by overiding its init function like explained in styling django ModelForm and use that styled form in modelformset_factory

OfferFormSet = modelformset_factory(Offer, form=StyledOfferForm , fields=('name', 'url', 'image', 'active'))