'Grab contents of FormFields and display on same page in django class-based views
I want to make a calculation using a FormView as input. The result should be displayed on the same page where the form is located.
This is what I have so far:
urls.py in the 'capsules'-app:
from django.urls import path
from . import views
app_name = 'capsules'
urlpatterns = [
path('functions/', views.CapsulesFunctionsView.as_view(), name='functions'),
path('uniformity/', views.CapsulesUniformityOfMassView.as_view(), name='uniformity'),
]
forms.py:
from django import forms
class CapsulesUniformityOfMass(forms.Form):
mass_1_caps_empty = forms.FloatField(label='Mass of 1 empty capsules [g]')
mass_20_caps_full = forms.FloatField(label='Mass of 20 full capsules [g]')
mass_max1 = forms.FloatField(label='Mass of heaviest capsule [g]')
mass_min1 = forms.FloatField(label='Mass of lightest capsule [g]')
models.py is empty, since I do not want to save the contents to the database
views.py:
from django.views.generic import TemplateView
from .forms import CapsulesUniformityOfMass
from django.views.generic.edit import FormView
# Create your views here.
#View for Capsules
class CapsulesFunctionsView(TemplateView):
template_name = 'capsules/functions.html'
# Create your views here.
class CapsulesUniformityOfMassView(FormView):
template_name = 'capsules/uniformity.html'
form_class = CapsulesUniformityOfMass
success_url = 'result'
def form_valid(self, form):
mass_1_caps_empty = form.cleaned_data['mass_1_caps_empty']
mass_20_caps_full = form.cleaned_data['mass_20_caps_full']
mass_max1 = form.cleaned_data['mass_max1']
mass_min1 = form.cleaned_data['mass_min1']
mean_content = mass_20_caps_full/20 - mass_1_caps_empty
if mean_content <= 0.3:
diff = 0.1
else:
diff = 0.15
upper1 = mean_content*(1+diff)
upper2 = mean_content*(1+2*diff)
lower1 = mean_content*(1-diff)
lower2 = mean_content*(1-2*diff)
return super().form_valid(form)
class ResultView(TemplateView):
template_name = 'capsules/result.html'
uniformity.html:
{% extends "base.html" %}
{% load django_bootstrap5 %}
{% block body_block %}
<h1>Enter capsules data</h1>
<form class="custom-form" method="post">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" class="btn btn-primary" value="check">
</form>
{% if form.is_valid %}
<!-- Results should be displayed here! -->
{% endif %}
{% endblock %}
I would like to display the upper1, upper2, lower1, lower2 on the same page (uniformity.html)
Thanks
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
