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
fields = '__all__'
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/">
{% csrf_token %}
<div class="accordion" id="accordionPlanning">
{% define '' as show %}
{% for key,value in formlist.items %}
{% define value|lookup:'form' as myform %}
{% define value|lookup:'modelname' as modelname %}
{% define value|lookup:'description' as description %}
{% define value|lookup:'description' as description %}
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse"
@ -17,13 +16,23 @@
{{ value|lookup:'heading' }}
</button>
</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">
{% 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>
{% endfor %}
</div>
</form>

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

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

@ -3,8 +3,6 @@ from . import views
urlpatterns = [
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('tables/',views.tables, name='ugstables'),
]

@ -1,14 +1,18 @@
from django.shortcuts import render
import sys
from django.http import HttpResponse
from django.template import loader
from django.shortcuts import render
from .form import *
from .models import *
from django.forms.models import model_to_dict
import sys
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)
@ -17,32 +21,27 @@ def index(request):
def planungsparameter(request):
'''
"""
Die Erzeugung der Webformulare soll dynamisch auf Basis der Model und Form Klassen
geschehen.
Dafür wird eine Liste mit den Klassenname der Models angelegt über die iteriert wird
Über die Funktion get_class(classname) erhält man das Klassenobjekt
modelclass für das Model
formclass für das Form
Dafür wird eine Liste mit den Klassennamen der Models angelegt über die iteriert wird
über die Funktion get_class(classname) erhält man die Klassenobjekte
modelclass für das Model
formclass für das Formular
ü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 = {}
modellist = ['Address', 'Summary', 'CompanyData']
for modelname in modellist:
# globals()[ + 'Form'] = get_class( + 'Form')
modelclass = get_class(modelname)
formclass = get_class(modelname + 'Form')
if request.method == "POST":
rp = request.POST
if modelname + 'Button' in rp:
if modelname + 'Button' in request.POST:
form = formclass(request.POST)
form.fields.pop('description')
if form.is_valid():
modelclass.objects.update(**form.cleaned_data)
else:
initial = {'description': 'Tester'}
# initial.update(model_to_dict(modelclass.objects.filter(id=1).first()))
form = formclass()
formpart = {
@ -60,33 +59,3 @@ def planungsparameter(request):
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