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