Last active
July 9, 2018 18:01
-
-
Save martin1007/ea010ae1238fff63ba47e2840642065e to your computer and use it in GitHub Desktop.
Django multiple formsets in one view not scaling
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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