Created
July 9, 2018 21:12
-
-
Save martin1007/ad2705d380ec5c1e2522950abbd4c684 to your computer and use it in GitHub Desktop.
Django need to extract data from db based on prefix
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
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__' | |
VIEWS.PY | |
from django.shortcuts import render | |
from .forms import modelformset_factory, AssumptionsForm | |
from .models import Assumptions | |
from django.core.exceptions import ValidationError | |
model_names = ['A', 'B', 'C', 'D'] | |
def get_assumptions(request): | |
AssumptionFormset = modelformset_factory( | |
Assumptions, form=AssumptionsForm, extra=5) | |
if request.method == 'POST': | |
formsets = [AssumptionFormset(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 = [AssumptionFormset(prefix=thing) for thing in model_names] | |
return render(request, 'assumptions.html', {'formsets': formsets}) | |
ASSUMPTIONS.HTML | |
<div class="form"> | |
<form action="" method="post"> | |
{% for formset in formsets %} | |
{% csrf_token %} | |
{{ 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" id={{formset.prefix}} name={{formset.prefix}} /> | |
{% endfor %} | |
<input type="submit" value="Submit"> | |
</form> | |
</div> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment