Last active
July 8, 2018 06:57
-
-
Save martin1007/71e07c27aeeb265fa9d55eea3f33aebe to your computer and use it in GitHub Desktop.
Django modelformset_factory 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', 'C', 'D', 'E', 'F', 'G'] | |
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 }} | |
{{ formset.non_form_errors.as_ul }} | |
<h1>{{formset.prefix}}</h1> | |
<table id="formset" class="form"> | |
{% for form in formset.forms %} | |
{% if forloop.first %} | |
<thead><tr> | |
{% for field in form.visible_fields %} | |
<th>{{ field.label|capfirst }}</th> | |
{% endfor %} | |
</tr></thead> | |
{% endif %} | |
<tr class="{% cycle 'row1' 'row2' %}"> | |
{% for field in form.visible_fields %} | |
<td> | |
{# Include the hidden fields in the form #} | |
{% if forloop.first %} | |
{% for hidden in form.hidden_fields %} | |
{{ hidden }} | |
{% endfor %} | |
{% endif %} | |
{{ field.errors.as_ul }} | |
{{ field }} | |
</td> | |
{% endfor %} | |
</tr> | |
{% endfor %} | |
</table> | |
<input type="hidden" name="save" /> | |
{% endfor %} | |
<input type="submit" value="Submit"> | |
</form> | |
</div> | |
MODELS.PY | |
from django.db import models | |
from django.forms import ModelForm | |
class Assumptions(models.Model): | |
Worst = models.FloatField(null=True, blank=True, default=None) | |
Base = models.FloatField(null=True, blank=True, default=None) | |
Best = 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__' | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment