From 7be9aec0f1225994e3202ff7f7795e98f2d46f3a Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Sun, 4 Sep 2022 14:00:11 +0200
Subject: [PATCH] Use correct options for different types of select fields

---
 django_forms_as_jsonschema/jsonschema.py | 34 +++++++++++++-----------
 1 file changed, 19 insertions(+), 15 deletions(-)

diff --git a/django_forms_as_jsonschema/jsonschema.py b/django_forms_as_jsonschema/jsonschema.py
index 9dab3af..2aa468f 100644
--- a/django_forms_as_jsonschema/jsonschema.py
+++ b/django_forms_as_jsonschema/jsonschema.py
@@ -132,21 +132,25 @@ class JSONSchema:
             case forms.CheckboxInput:
                 new_field["type"] = "boolean"
 
-            case forms.Select:
-                new_field["type"] = "string"
-                new_field["enum"] = []  # Fixme: load data from widget.options(…)
-
-            case forms.NullBooleanSelect:
-                ...
-
-            case forms.SelectMultiple:
-                ...
-
-            case forms.RadioSelect:
-                ...
-
-            case forms.CheckboxSelectMultiple:
-                ...
+            case forms.Select | forms.SelectMultiple | forms.RadioSelect | forms.CheckboxSelectMultiple, forms.NullBooleanSelect:
+                one_of = []
+                for const, title in field.widget.choices:
+                    one_of.append(dict(const=str(const), title=str(title)))
+
+                if field.widget.allow_multiple_selected:
+                    new_field["type"] = "array"
+                    new_field["items"] = {
+                        "type": "string",
+                        "oneOf": one_of
+                    }
+                else:
+                    new_field["type"] = "string"
+                    new_field["oneOf"] = one_of
+
+                if type(field.widget) == forms.RadioSelect:
+                    new_field["x-display"] = "radio"
+                elif type(field.widget) == forms.CheckboxSelectMultiple:
+                    new_field["x-display"] = "checkbox"
 
             case forms.SplitDateTimeWidget:
                 ...
-- 
GitLab