- 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:
@@ -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"""
|
||||
|
||||
Reference in New Issue
Block a user