diff --git a/django_forms_as_jsonschema/jsonschema.py b/django_forms_as_jsonschema/jsonschema.py index 9dab3afb29b1b1aa101342a5b80924aecfe21dd9..2aa468f5b38304c8f79fb947f6f9562e739e9b0a 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: ...