Skip to content

Instantly share code, notes, and snippets.

@martin1007
Last active July 9, 2018 18:01
Show Gist options
  • Save martin1007/ea010ae1238fff63ba47e2840642065e to your computer and use it in GitHub Desktop.
Save martin1007/ea010ae1238fff63ba47e2840642065e to your computer and use it in GitHub Desktop.
Django multiple formsets in one view not scaling
VIEWS.PY
from django.shortcuts import render
from .forms import modelformset_factory, AssumptionsForm
from .models import Assumptions
model_names = ['A', 'B']
def get_assumptions(request):
AssumptionsFormset = modelformset_factory(
Assumptions, form=AssumptionsForm, extra=5)
if request.method == 'POST':
formsets = [AssumptionsFormset(request.POST, prefix=thing) for thing in model_names]
if all([formset.is_valid() for formset in formsets]):
for formset in formsets:
for form in formset:
form.save()
else:
formsets = [AssumptionsFormset(request.POST, prefix=thing) for thing in model_names]
return render(request, 'assumptions.html', {'formsets': formsets})
ASSUMPTIONS.HTML
<div class="form">
<form action="" method="post">
{% csrf_token %}
{% for formset in formsets %}
{{ formset.management_form }}
<h1>{{formset.prefix}}</h1>
<table>
{{formset}}
</table>
{% endfor %}
<input type="submit" value="Submit">
</form>
</div>
MODELS.PY
from django.db import models
from django.forms import ModelForm
class Assumptions(models.Model):
Base = models.FloatField(null=True, blank=True, default=None)
FORMS.PY
from django import forms
from django.forms import modelformset_factory, ModelForm
from .models import Assumptions
class AssumptionsForm(ModelForm):
class Meta:
model = Assumptions
fields = '__all__'
ERROR DESCRIPTION:
Validation Error
['ManagementForm data is missing or has been tampered with']
->{{ formset.management_form }}
-> return render(request, 'assumptions.html', {'formsets': formsets}) local vars
COMMENTS:
Tried to placing formset.management_form in many locations at template such as taking out of for loop, taking out of form tags,
using formsetS.management_form and etc. Yet, still not working.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment