Last active
July 8, 2018 06:57
-
-
Save martin1007/6474f3a7f14540bae729e8b4d31f8ca2 to your computer and use it in GitHub Desktop.
Django modelformset_factory working with 2 formsets
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 | |
def get_assumptions(request): | |
AssumptionsFormset = modelformset_factory( | |
Assumptions, form=AssumptionsForm, extra=5) | |
if request.method == 'POST': | |
formset1 = AssumptionsFormset(request.POST, prefix='A') | |
formset2 = AssumptionsFormset(request.POST, prefix='B') | |
if formset1.is_valid(): | |
for form in formset1: | |
form.save() | |
if formset2.is_valid(): | |
for form in formset2: | |
form.save() | |
else: | |
formset1 = AssumptionsFormset(prefix='A') | |
formset2 = AssumptionsFormset(prefix='B') | |
return render(request, 'assumptions.html', {'formset1': formset1, 'formset2': formset2}) | |
ASSUMPTIONS.HTML | |
<div class="form"> | |
<form action="" method="post"> | |
{% csrf_token %} | |
{{ formset1.management_form }} | |
{{ formset1.non_form_errors.as_ul }} | |
<h1>{{formset1.prefix}}</h1> | |
<table id="formset" class="form"> | |
{% for form in formset1.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" /> | |
{{ formset2.management_form }} | |
{{ formset2.non_form_errors.as_ul }} | |
<h1>{{formset2.prefix}}</h1> | |
<table id="formset" class="form"> | |
{% for form in formset2.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" /> | |
<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