From b6f5288eed4cc9aceffb20eb1798a6ceddf577f4 Mon Sep 17 00:00:00 2001 From: Ross Date: Wed, 17 Dec 2025 15:58:47 +0000 Subject: [PATCH] Enhance normalization function to handle sets and improve recursion for Pydantic models --- djangorota/rota/forms.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/djangorota/rota/forms.py b/djangorota/rota/forms.py index e7c965c..1d2b1b7 100644 --- a/djangorota/rota/forms.py +++ b/djangorota/rota/forms.py @@ -181,22 +181,27 @@ class WorkerForm(forms.ModelForm): parsed = val def _normalize(obj): - # Normalize pydantic BaseModel instances (v2:v1) + # Normalize pydantic BaseModel instances (v2:v1) and recurse if hasattr(obj, "model_dump"): try: - return obj.model_dump() + res = obj.model_dump() + return _normalize(res) except Exception: pass if hasattr(obj, "dict") and not isinstance(obj, dict): try: - return obj.dict() + res = obj.dict() + return _normalize(res) except Exception: pass - # Recurse lists/tuples + # Recurse lists/tuples/sets if isinstance(obj, list): return [_normalize(i) for i in obj] if isinstance(obj, tuple): return [_normalize(i) for i in obj] + if isinstance(obj, set): + # JSON can't represent sets; convert to list + return [_normalize(i) for i in obj] if isinstance(obj, dict): return {k: _normalize(v) for k, v in obj.items()} return obj