- TRA-99 Solved. Unable to create a new Tenant Make

- Generic improvement of initialisation of Dynamic Forms, ensuring correct form processing
This commit is contained in:
Josako
2025-11-26 11:31:25 +01:00
parent 0d3c3949de
commit f10bb6f395
4 changed files with 40 additions and 21 deletions

View File

@@ -96,14 +96,42 @@ class OrderedListField(TextAreaField):
class DynamicFormBase(FlaskForm):
def __init__(self, formdata=None, *args, **kwargs):
# Belangrijk: formdata doorgeven aan FlaskForm zodat WTForms POST-data kan binden
super(DynamicFormBase, self).__init__(formdata=formdata, *args, **kwargs)
def __init__(self, *args, **kwargs):
"""Base class voor dynamische formulieren.
Belangrijk ontwerpprincipe:
- We laten "normaal" FlaskForm-gedrag intact. Dat betekent dat als een view
geen expliciete ``formdata=`` meegeeft, FlaskForm zelf beslist of en hoe
``request.form`` wordt gebruikt (inclusief CSRF-handling).
- Als een view wel expliciet ``formdata=`` meegeeft, wordt dat gewoon door de
superklasse afgehandeld.
Hierdoor hoeven views DynamicFormBase niet anders te behandelen dan een
standaard FlaskForm; dynamische velden zijn een extra laag bovenop het
standaard gedrag.
"""
# Laat FlaskForm alle standaard initialisatielogica uitvoeren
super(DynamicFormBase, self).__init__(*args, **kwargs)
# Maps collection names to lists of field names
self.dynamic_fields = {}
# Store formdata for later use
self.formdata = formdata
self.raw_formdata = request.form.to_dict()
# Bepaal effectieve formdata voor intern gebruik.
# In de meeste gevallen is dat bij POST gewoon request.form; bij GET is er
# doorgaans geen formdata en vertrouwen we op object-binding en defaults.
if request.method == 'POST':
self.formdata = request.form
# Bewaar een eenvoudige dict-weergave voor hulplogica zoals
# get_dynamic_data (bijvoorbeeld voor BooleanFields)
try:
self.raw_formdata = request.form.to_dict(flat=False)
except TypeError:
# Fallback voor oudere/afwijkende MultiDict-implementaties
self.raw_formdata = request.form.to_dict()
else:
self.formdata = None
self.raw_formdata = {}
def _create_field_validators(self, field_def):
"""Create validators based on field definition"""