Eingabefelder werden dynamisch aus dem Model/Form erzeugt.

Aufgeräumt
master
Ulf Wagner 2 years ago
parent a26752044b
commit 28e01adde1
  1. 2
      UGSdjangoProject/ugssim/form.py
  2. 19
      UGSdjangoProject/ugssim/templates/planungsparameter/planungsparameter.html
  3. 4
      UGSdjangoProject/ugssim/templates/ugssim/navigation.html
  4. 3
      UGSdjangoProject/ugssim/templatetags/read_dictonary.py
  5. 2
      UGSdjangoProject/ugssim/urls.py
  6. 61
      UGSdjangoProject/ugssim/views.py

@ -45,7 +45,7 @@ class SummaryForm(UGSModelForm):
model = Summary model = Summary
fields = '__all__' fields = '__all__'
widgets = { widgets = {
'text': forms.Textarea(attrs={'rows': 10, 'cols': 30}) 'text': forms.Textarea(attrs={'rows': 10})
} }

@ -4,11 +4,10 @@
<form method="post" class="form-group" action="/planungsparameter/"> <form method="post" class="form-group" action="/planungsparameter/">
{% csrf_token %} {% csrf_token %}
<div class="accordion" id="accordionPlanning"> <div class="accordion" id="accordionPlanning">
{% define '' as show %}
{% for key,value in formlist.items %} {% for key,value in formlist.items %}
{% define value|lookup:'form' as myform %} {% define value|lookup:'form' as myform %}
{% define value|lookup:'modelname' as modelname %} {% define value|lookup:'modelname' as modelname %}
{% define value|lookup:'description' as description %} {% define value|lookup:'description' as description %}
<div class="accordion-item"> <div class="accordion-item">
<h2 class="accordion-header"> <h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" <button class="accordion-button" type="button" data-bs-toggle="collapse"
@ -17,13 +16,23 @@
{{ value|lookup:'heading' }} {{ value|lookup:'heading' }}
</button> </button>
</h2> </h2>
<div id="collapse{{ modelname }}" class="accordion-collapse collapse {{ show }}" data-bs-parent="#accordionPlanning"> <div id="collapse{{ modelname }}" class="accordion-collapse collapse show"
data-bs-parent="#accordionPlanning">
<div class="accordion-body"> <div class="accordion-body">
{% include 'planungsparameter/mandantendaten.html' %} {{ description }}
{% for field in myform %}
<div class="form-group">
{% if field.html_name == "description" %}
{% else %}
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{{field }}
{% endif %}
</div>
{% endfor %}
<button type="submit" class="btn btn-primary" name="{{ modelname }}Button">Submit</button>
</div> </div>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
</form> </form>

@ -30,11 +30,11 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link disabled">Pro Version Button</a> <a class="nav-link disabled">Pro Version Button</a>
</li> </li>
</ul> </ul><!--
<form class="d-flex" role="search"> <form class="d-flex" role="search">
<input class="form-control me-2" type="search" placeholder="Suche" aria-label="Search"> <input class="form-control me-2" type="search" placeholder="Suche" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Suche</button> <button class="btn btn-outline-success" type="submit">Suche</button>
</form> </form>-->
</div> </div>
</div> </div>
</nav> </nav>

@ -1,9 +1,8 @@
from django import template from django import template
from django.template.loader_tags import register from django.template.loader_tags import register
register = template.Library()
# register = template.Library()
@register.filter(name='lookup') @register.filter(name='lookup')
def lookup(value, arg): def lookup(value, arg):
""" """

@ -3,8 +3,6 @@ from . import views
urlpatterns = [ urlpatterns = [
path('', views.index, name='ugs_index'), path('', views.index, name='ugs_index'),
path('input/', views.input, name='ugs_input'),
path('address/', views.address, name='ugs_address'),
path('planungsparameter/', views.planungsparameter, name='ugs_planungsparameter'), path('planungsparameter/', views.planungsparameter, name='ugs_planungsparameter'),
# path('tables/',views.tables, name='ugstables'), # path('tables/',views.tables, name='ugstables'),
] ]

@ -1,14 +1,18 @@
from django.shortcuts import render import sys
from django.http import HttpResponse from django.http import HttpResponse
from django.template import loader from django.template import loader
from django.shortcuts import render from django.shortcuts import render
from .form import * from .form import *
from .models import *
from django.forms.models import model_to_dict
import sys
def get_class(classname): def get_class(classname):
"""
Retrieve a class object by its name.
:param classname: Name of the class to retrieve.
:return: The class object with the given name.
"""
return getattr(sys.modules[__name__], classname) return getattr(sys.modules[__name__], classname)
@ -17,32 +21,27 @@ def index(request):
def planungsparameter(request): def planungsparameter(request):
''' """
Die Erzeugung der Webformulare soll dynamisch auf Basis der Model und Form Klassen Die Erzeugung der Webformulare soll dynamisch auf Basis der Model und Form Klassen
geschehen. geschehen.
Dafür wird eine Liste mit den Klassenname der Models angelegt über die iteriert wird Dafür wird eine Liste mit den Klassennamen der Models angelegt über die iteriert wird
Über die Funktion get_class(classname) erhält man das Klassenobjekt über die Funktion get_class(classname) erhält man die Klassenobjekte
modelclass für das Model modelclass für das Model
formclass für das Form formclass für das Formular
über diese wird dann iterierter. über diese wird dann iterierter.
Ein Formularfeld 'description' ist bei jedem Formular vorhanden, da die aber nicht """
in der Datenbank /Model vorhanden ist. Daher wird dieses Feld entfernt (pop)
'''
formlist = {} formlist = {}
modellist = ['Address', 'Summary', 'CompanyData'] modellist = ['Address', 'Summary', 'CompanyData']
for modelname in modellist: for modelname in modellist:
# globals()[ + 'Form'] = get_class( + 'Form')
modelclass = get_class(modelname) modelclass = get_class(modelname)
formclass = get_class(modelname + 'Form') formclass = get_class(modelname + 'Form')
if request.method == "POST": if request.method == "POST":
rp = request.POST if modelname + 'Button' in request.POST:
if modelname + 'Button' in rp:
form = formclass(request.POST) form = formclass(request.POST)
form.fields.pop('description') form.fields.pop('description')
if form.is_valid(): if form.is_valid():
modelclass.objects.update(**form.cleaned_data) modelclass.objects.update(**form.cleaned_data)
else: else:
initial = {'description': 'Tester'}
# initial.update(model_to_dict(modelclass.objects.filter(id=1).first())) # initial.update(model_to_dict(modelclass.objects.filter(id=1).first()))
form = formclass() form = formclass()
formpart = { formpart = {
@ -60,33 +59,3 @@ def planungsparameter(request):
return render(request, 'planungsparameter/planungsparameter.html', context) return render(request, 'planungsparameter/planungsparameter.html', context)
def companydata(request):
template = loader.get_template('ugssim/companydata.html')
return HttpResponse(template.render(request))
def input(request):
template = loader.get_template('ugssim/companydata.html')
return HttpResponse(template.render(request))
'''
def get_name(request):
if request.method == 'POST':
form = NameForm(request.POST)
if form.is_valid():
return HttpResponse(f"Hello, {form.your_name}!")
else:
form = NameForm()
return render(request, 'ugssim/name.html', {'form': form})
'''
def address(request):
if request.method == 'POST':
form = AddressForm(request.POST)
if form.is_valid():
form.save()
else:
form = AddressForm()
return render(request, 'ugssim/address.html', {'form': form})

Loading…
Cancel
Save