Repository: comic/grand-challenge.org

Issue:
Clear old question types *_LINE_TEXT
With the introduction of:
- https://github.com/DIAGNijmegen/rse-roadmap/issues/165

Some old question types can/should be removed once CIRRUS `v2023.06.x ` is the previous release.

A two-staged approach should happen:

## 1. Remove from options and (manually migrate)
- [x] Ensure `AnswerType.SINGLE_LINE_TEXT` and `AnswerType.MULTI_LINE_TEXT` are no longer selectable options in **production**.
- [x] Ensure users get an error when saving, suggesting AnswerType.TEXT as an alternative.

 Migrate data manually via the following commands.
- [x] `Question.objects.filter(answer_type=Question.AnswerType.SINGLE_LINE_TEXT).update(answer_type=Question.AnswerType.TEXT, widget=QuestionWidgetKindChoices.TEXT_INPUT)`
- [x] `Question.objects.filter(answer_type=Question.AnswerType.MULTI_LINE_TEXT).update(answer_type=Question.AnswerType.TEXT, widget=QuestionWidgetKindChoices.TEXT_AREA)`
- [x] `Question.objects.filter(answer_type=Question.AnswerType.MULTIPLE_CHOICE_DROPDOWN).update(answer_type=Question.AnswerType.MULTIPLE_CHOICE, widget=QuestionWidgetKindChoices.SELECT_MULTIPLE)`

##  2. Remove model members
- [x]  Remove `AnswerType.SINGLE_LINE_TEXT` and `AnswerType.MULTI_LINE_TEXT` and all references to them from the models.
- [x]  Rename `'Number input'` serialisation for `QuestionWidgetKindChoices.NUMBER_INPUT` to `'Number Input'` (Note capitalization of the 'i'). CIRRUS supports both 'input' and 'Input' but the latter is in common style.
- ~Make `QuestionWidgetKindChoices.NUMBER_INPUT" the default for `NUMBER`~
- ~Make `QuestionWidgetKindChoices.CHECKBOX_SELECT_MULTIPLE` the default for `MULTIPLE_CHOICE`~
- [x]  Make `QuestionWidgetKindChoices.RADIO_SELECT` the default for `CHOICE`




Discussion:
Quick note, reading the pitch I am reminded that the above instructions should also include something for:
* ~Deprecating `multiple choice dropdown` (and migrate to `multiple choice` + `select` widget)~
* ~Making radio buttons default for choice~

Edit: Added to above instructions.

Because of support issues `v2023.06.x ` hasn't been made the previous release this cycle.
@chrisvanrun can this be done now?
Yes. V2023.11 is now the oldest release currently in usage. If I read my old-self instructions correctly that means this can have a go.

Once the resulting changeset is live we can update CIRRUS to remove the same references in the next release.
>  Make QuestionWidgetKindChoices.NUMBER_INPUT" the default for NUMBER`
 Make QuestionWidgetKindChoices.CHECKBOX_SELECT_MULTIPLE the default for MULTIPLE_CHOICE

These currently allow an empty choice ("---") for the widget which is always the default. Do we want to force a choice of widget here?

Resolving patch:
diff --git a/app/grandchallenge/components/schemas.py b/app/grandchallenge/components/schemas.py
--- a/app/grandchallenge/components/schemas.py
+++ b/app/grandchallenge/components/schemas.py
@@ -3,8 +3,6 @@
     "definitions": {
         "null": {"type": "null"},
         "TEXT": {"type": "string"},
-        "STXT": {"type": "string"},
-        "MTXT": {"type": "string"},
         "BOOL": {"type": "boolean"},
         "NUMB": {"type": "number"},
         "HEAD": {"type": "null"},
@@ -565,8 +563,7 @@
     # anyOf should exist, check Question.is_answer_valid
     "anyOf": [
         {"$ref": "#/definitions/null"},
-        {"$ref": "#/definitions/STXT"},
-        {"$ref": "#/definitions/MTXT"},
+        {"$ref": "#/definitions/TEXT"},
         {"$ref": "#/definitions/BOOL"},
         {"$ref": "#/definitions/NUMB"},
         {"$ref": "#/definitions/HEAD"},
diff --git a/app/grandchallenge/reader_studies/migrations/0051_alter_answer_answer_alter_historicalanswer_answer_and_more.py b/app/grandchallenge/reader_studies/migrations/0051_alter_answer_answer_alter_historicalanswer_answer_and_more.py
new file mode 100644
--- /dev/null
+++ b/app/grandchallenge/reader_studies/migrations/0051_alter_answer_answer_alter_historicalanswer_answer_and_more.py
@@ -0,0 +1,1669 @@
+# Generated by Django 4.2.9 on 2024-01-19 14:32
+
+from django.db import migrations, models
+
+import grandchallenge.core.validators
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("reader_studies", "0050_question_default_annotation_color"),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name="answer",
+            name="answer",
+            field=models.JSONField(
+                null=True,
+                validators=[
+                    grandchallenge.core.validators.JSONValidator(
+                        schema={
+                            "$schema": "http://json-schema.org/draft-07/schema#",
+                            "anyOf": [
+                                {"$ref": "#/definitions/null"},
+                                {"$ref": "#/definitions/TEXT"},
+                                {"$ref": "#/definitions/BOOL"},
+                                {"$ref": "#/definitions/NUMB"},
+                                {"$ref": "#/definitions/HEAD"},
+                                {"$ref": "#/definitions/2DBB"},
+                                {"$ref": "#/definitions/DIST"},
+                                {"$ref": "#/definitions/MDIS"},
+                                {"$ref": "#/definitions/POIN"},
+                                {"$ref": "#/definitions/MPOI"},
+                                {"$ref": "#/definitions/POLY"},
+                                {"$ref": "#/definitions/MPOL"},
+                                {"$ref": "#/definitions/CHOI"},
+                                {"$ref": "#/definitions/MCHO"},
+                                {"$ref": "#/definitions/MCHD"},
+                                {"$ref": "#/definitions/M2DB"},
+                                {"$ref": "#/definitions/MASK"},
+                                {"$ref": "#/definitions/LINE"},
+                                {"$ref": "#/definitions/MLIN"},
+                                {"$ref": "#/definitions/ANGL"},
+                                {"$ref": "#/definitions/MANG"},
+                                {"$ref": "#/definitions/ELLI"},
+                                {"$ref": "#/definitions/MELL"},
+                                {"$ref": "#/definitions/3ANG"},
+                                {"$ref": "#/definitions/M3AN"},
+                            ],
+                            "definitions": {
+                                "2D-bounding-box-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "corners": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 4,
+                                            "minItems": 4,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["2D bounding box"]},
+                                    },
+                                    "required": ["corners"],
+                                    "type": "object",
+                                },
+                                "2DBB": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "corners": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 4,
+                                            "minItems": 4,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["2D bounding box"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "corners"],
+                                    "type": "object",
+                                },
+                                "3-point-angle-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "angle": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"const": "Three-point angle"},
+                                    },
+                                    "required": ["angle"],
+                                    "type": "object",
+                                },
+                                "3ANG": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "angle": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"const": "Three-point angle"},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "angle"],
+                                    "type": "object",
+                                },
+                                "ANGL": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "lines": {
+                                            "items": {
+                                                "items": {
+                                                    "items": {
+                                                        "type": "number"
+                                                    },
+                                                    "maxItems": 3,
+                                                    "minItems": 3,
+                                                    "type": "array",
+                                                },
+                                                "maxItems": 2,
+                                                "minItems": 2,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 2,
+                                            "minItems": 2,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["Angle"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["lines", "version", "type"],
+                                    "type": "object",
+                                },
+                                "BOOL": {"type": "boolean"},
+                                "CHOI": {"type": "number"},
+                                "DIST": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "end": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "start": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "type": {
+                                            "enum": ["Distance measurement"]
+                                        },
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": [
+                                        "version",
+                                        "type",
+                                        "start",
+                                        "end",
+                                    ],
+                                    "type": "object",
+                                },
+                                "ELLI": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "major_axis": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 2,
+                                            "minItems": 2,
+                                            "type": "array",
+                                        },
+                                        "minor_axis": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 2,
+                                            "minItems": 2,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["Ellipse"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": [
+                                        "version",
+                                        "type",
+                                        "major_axis",
+                                        "minor_axis",
+                                    ],
+                                    "type": "object",
+                                },
+                                "HEAD": {"type": "null"},
+                                "LINE": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "name": {"type": "string"},
+                                        "path_point_lists": {
+                                            "items": {
+                                                "items": {
+                                                    "items": {
+                                                        "type": "number"
+                                                    },
+                                                    "maxItems": 3,
+                                                    "minItems": 3,
+                                                    "type": "array",
+                                                },
+                                                "type": "array",
+                                            },
+                                            "type": "array",
+                                        },
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "seed_points": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "type": "array",
+                                        },
+                                        "type": {"enum": ["Line"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": [
+                                        "seed_points",
+                                        "path_point_lists",
+                                        "type",
+                                        "version",
+                                    ],
+                                    "type": "object",
+                                },
+                                "M2DB": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "boxes": {
+                                            "items": {
+                                                "allOf": [
+                                                    {
+                                                        "$ref": "#/definitions/2D-bounding-box-object"
+                                                    }
+                                                ]
+                                            },
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "type": {
+                                            "enum": [
+                                                "Multiple 2D bounding boxes"
+                                            ]
+                                        },
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "boxes"],
+                                    "type": "object",
+                                },
+                                "M3AN": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "angles": {
+                                            "items": {
+                                                "allOf": [
+                                                    {
+                                                        "$ref": "#/definitions/3-point-angle-object"
+                                                    }
+                                                ]
+                                            },
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "type": {
+                                            "enum": [
+                                                "Multiple three-point angles"
+                                            ]
+                                        },
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "angles"],
+                                    "type": "object",
+                                },
+                                "MANG": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "angles": {
+                                            "items": {
+                                                "$ref": "#/definitions/angle-object"
+                                            },
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "type": {"enum": ["Multiple angles"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["type", "version", "angles"],
+                                    "type": "object",
+                                },
+                                "MASK": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "upload_session_pk": {
+                                            "format": "uuid",
+                                            "type": "string",
+                                        }
+                                    },
+                                    "required": ["upload_session_pk"],
+                                    "type": "object",
+                                },
+                                "MCHD": {
+                                    "items": {"type": "number"},
+                                    "type": "array",
+                                },
+                                "MCHO": {
+                                    "items": {"type": "number"},
+                                    "type": "array",
+                                },
+                                "MDIS": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "lines": {
+                                            "items": {
+                                                "allOf": [
+                                                    {
+                                                        "$ref": "#/definitions/line-object"
+                                                    }
+                                                ]
+                                            },
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "type": {
+                                            "enum": [
+                                                "Multiple distance measurements"
+                                            ]
+                                        },
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "lines"],
+                                    "type": "object",
+                                },
+                                "MELL": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "ellipses": {
+                                            "items": {
+                                                "allOf": [
+                                                    {
+                                                        "$ref": "#/definitions/ellipse-object"
+                                                    }
+                                                ]
+                                            },
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "type": {
+                                            "enum": ["Multiple ellipses"]
+                                        },
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": [
+                                        "version",
+                                        "type",
+                                        "ellipses",
+                                    ],
+                                    "type": "object",
+                                },
+                                "MLIN": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "lines": {
+                                            "items": {
+                                                "$ref": "#/definitions/spline-object"
+                                            },
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "type": {"enum": ["Multiple lines"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["type", "version", "lines"],
+                                    "type": "object",
+                                },
+                                "MPOI": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "name": {"type": "string"},
+                                        "points": {
+                                            "items": {
+                                                "allOf": [
+                                                    {
+                                                        "$ref": "#/definitions/point-object"
+                                                    }
+                                                ]
+                                            },
+                                            "type": "array",
+                                        },
+                                        "type": {"enum": ["Multiple points"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "points"],
+                                    "type": "object",
+                                },
+                                "MPOL": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "name": {"type": "string"},
+                                        "polygons": {
+                                            "items": {
+                                                "$ref": "#/definitions/polygon-object"
+                                            },
+                                            "type": "array",
+                                        },
+                                        "type": {
+                                            "enum": ["Multiple polygons"]
+                                        },
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": [
+                                        "type",
+                                        "version",
+                                        "polygons",
+                                    ],
+                                    "type": "object",
+                                },
+                                "NUMB": {"type": "number"},
+                                "POIN": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "name": {"type": "string"},
+                                        "point": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["Point"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "point"],
+                                    "type": "object",
+                                },
+                                "POLY": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "groups": {
+                                            "items": {"type": "string"},
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "path_points": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "type": "array",
+                                        },
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "seed_point": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "sub_type": {"type": "string"},
+                                        "type": {"enum": ["Polygon"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": [
+                                        "seed_point",
+                                        "path_points",
+                                        "sub_type",
+                                        "groups",
+                                        "type",
+                                        "version",
+                                    ],
+                                    "type": "object",
+                                },
+                                "TEXT": {"type": "string"},
+                                "angle-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "lines": {
+                                            "items": {
+                                                "items": {
+                                                    "items": {
+                                                        "type": "number"
+                                                    },
+                                                    "maxItems": 3,
+                                                    "minItems": 3,
+                                                    "type": "array",
+                                                },
+                                                "maxItems": 2,
+                                                "minItems": 2,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 2,
+                                            "minItems": 2,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["Angle"]},
+                                    },
+                                    "required": ["lines"],
+                                    "type": "object",
+                                },
+                                "ellipse-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "major_axis": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 2,
+                                            "minItems": 2,
+                                            "type": "array",
+                                        },
+                                        "minor_axis": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 2,
+                                            "minItems": 2,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["Ellipse"]},
+                                    },
+                                    "required": ["major_axis", "minor_axis"],
+                                    "type": "object",
+                                },
+                                "line-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "end": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "start": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "type": {
+                                            "enum": ["Distance measurement"]
+                                        },
+                                    },
+                                    "required": ["start", "end"],
+                                    "type": "object",
+                                },
+                                "null": {"type": "null"},
+                                "point-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "name": {"type": "string"},
+                                        "point": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["Point"]},
+                                    },
+                                    "required": ["point"],
+                                    "type": "object",
+                                },
+                                "polygon-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "groups": {
+                                            "items": {"type": "string"},
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "path_points": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "type": "array",
+                                        },
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "seed_point": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "sub_type": {"type": "string"},
+                                        "type": {"enum": ["Polygon"]},
+                                    },
+                                    "required": [
+                                        "seed_point",
+                                        "path_points",
+                                        "sub_type",
+                                        "groups",
+                                    ],
+                                    "type": "object",
+                                },
+                                "spline-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "name": {"type": "string"},
+                                        "path_point_lists": {
+                                            "items": {
+                                                "items": {
+                                                    "items": {
+                                                        "type": "number"
+                                                    },
+                                                    "maxItems": 3,
+                                                    "minItems": 3,
+                                                    "type": "array",
+                                                },
+                                                "type": "array",
+                                            },
+                                            "type": "array",
+                                        },
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "seed_points": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "type": "array",
+                                        },
+                                        "type": {"enum": ["Line"]},
+                                    },
+                                    "required": [
+                                        "seed_points",
+                                        "path_point_lists",
+                                    ],
+                                    "type": "object",
+                                },
+                                "version-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "major": {
+                                            "minimum": 0,
+                                            "multipleOf": 1.0,
+                                            "type": "number",
+                                        },
+                                        "minor": {
+                                            "minimum": 0,
+                                            "multipleOf": 1.0,
+                                            "type": "number",
+                                        },
+                                    },
+                                    "required": ["major", "minor"],
+                                    "type": "object",
+                                },
+                            },
+                        }
+                    )
+                ],
+            ),
+        ),
+        migrations.AlterField(
+            model_name="historicalanswer",
+            name="answer",
+            field=models.JSONField(
+                null=True,
+                validators=[
+                    grandchallenge.core.validators.JSONValidator(
+                        schema={
+                            "$schema": "http://json-schema.org/draft-07/schema#",
+                            "anyOf": [
+                                {"$ref": "#/definitions/null"},
+                                {"$ref": "#/definitions/TEXT"},
+                                {"$ref": "#/definitions/BOOL"},
+                                {"$ref": "#/definitions/NUMB"},
+                                {"$ref": "#/definitions/HEAD"},
+                                {"$ref": "#/definitions/2DBB"},
+                                {"$ref": "#/definitions/DIST"},
+                                {"$ref": "#/definitions/MDIS"},
+                                {"$ref": "#/definitions/POIN"},
+                                {"$ref": "#/definitions/MPOI"},
+                                {"$ref": "#/definitions/POLY"},
+                                {"$ref": "#/definitions/MPOL"},
+                                {"$ref": "#/definitions/CHOI"},
+                                {"$ref": "#/definitions/MCHO"},
+                                {"$ref": "#/definitions/MCHD"},
+                                {"$ref": "#/definitions/M2DB"},
+                                {"$ref": "#/definitions/MASK"},
+                                {"$ref": "#/definitions/LINE"},
+                                {"$ref": "#/definitions/MLIN"},
+                                {"$ref": "#/definitions/ANGL"},
+                                {"$ref": "#/definitions/MANG"},
+                                {"$ref": "#/definitions/ELLI"},
+                                {"$ref": "#/definitions/MELL"},
+                                {"$ref": "#/definitions/3ANG"},
+                                {"$ref": "#/definitions/M3AN"},
+                            ],
+                            "definitions": {
+                                "2D-bounding-box-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "corners": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 4,
+                                            "minItems": 4,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["2D bounding box"]},
+                                    },
+                                    "required": ["corners"],
+                                    "type": "object",
+                                },
+                                "2DBB": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "corners": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 4,
+                                            "minItems": 4,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["2D bounding box"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "corners"],
+                                    "type": "object",
+                                },
+                                "3-point-angle-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "angle": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"const": "Three-point angle"},
+                                    },
+                                    "required": ["angle"],
+                                    "type": "object",
+                                },
+                                "3ANG": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "angle": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"const": "Three-point angle"},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "angle"],
+                                    "type": "object",
+                                },
+                                "ANGL": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "lines": {
+                                            "items": {
+                                                "items": {
+                                                    "items": {
+                                                        "type": "number"
+                                                    },
+                                                    "maxItems": 3,
+                                                    "minItems": 3,
+                                                    "type": "array",
+                                                },
+                                                "maxItems": 2,
+                                                "minItems": 2,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 2,
+                                            "minItems": 2,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["Angle"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["lines", "version", "type"],
+                                    "type": "object",
+                                },
+                                "BOOL": {"type": "boolean"},
+                                "CHOI": {"type": "number"},
+                                "DIST": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "end": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "start": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "type": {
+                                            "enum": ["Distance measurement"]
+                                        },
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": [
+                                        "version",
+                                        "type",
+                                        "start",
+                                        "end",
+                                    ],
+                                    "type": "object",
+                                },
+                                "ELLI": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "major_axis": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 2,
+                                            "minItems": 2,
+                                            "type": "array",
+                                        },
+                                        "minor_axis": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 2,
+                                            "minItems": 2,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["Ellipse"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": [
+                                        "version",
+                                        "type",
+                                        "major_axis",
+                                        "minor_axis",
+                                    ],
+                                    "type": "object",
+                                },
+                                "HEAD": {"type": "null"},
+                                "LINE": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "name": {"type": "string"},
+                                        "path_point_lists": {
+                                            "items": {
+                                                "items": {
+                                                    "items": {
+                                                        "type": "number"
+                                                    },
+                                                    "maxItems": 3,
+                                                    "minItems": 3,
+                                                    "type": "array",
+                                                },
+                                                "type": "array",
+                                            },
+                                            "type": "array",
+                                        },
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "seed_points": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "type": "array",
+                                        },
+                                        "type": {"enum": ["Line"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": [
+                                        "seed_points",
+                                        "path_point_lists",
+                                        "type",
+                                        "version",
+                                    ],
+                                    "type": "object",
+                                },
+                                "M2DB": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "boxes": {
+                                            "items": {
+                                                "allOf": [
+                                                    {
+                                                        "$ref": "#/definitions/2D-bounding-box-object"
+                                                    }
+                                                ]
+                                            },
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "type": {
+                                            "enum": [
+                                                "Multiple 2D bounding boxes"
+                                            ]
+                                        },
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "boxes"],
+                                    "type": "object",
+                                },
+                                "M3AN": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "angles": {
+                                            "items": {
+                                                "allOf": [
+                                                    {
+                                                        "$ref": "#/definitions/3-point-angle-object"
+                                                    }
+                                                ]
+                                            },
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "type": {
+                                            "enum": [
+                                                "Multiple three-point angles"
+                                            ]
+                                        },
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "angles"],
+                                    "type": "object",
+                                },
+                                "MANG": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "angles": {
+                                            "items": {
+                                                "$ref": "#/definitions/angle-object"
+                                            },
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "type": {"enum": ["Multiple angles"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["type", "version", "angles"],
+                                    "type": "object",
+                                },
+                                "MASK": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "upload_session_pk": {
+                                            "format": "uuid",
+                                            "type": "string",
+                                        }
+                                    },
+                                    "required": ["upload_session_pk"],
+                                    "type": "object",
+                                },
+                                "MCHD": {
+                                    "items": {"type": "number"},
+                                    "type": "array",
+                                },
+                                "MCHO": {
+                                    "items": {"type": "number"},
+                                    "type": "array",
+                                },
+                                "MDIS": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "lines": {
+                                            "items": {
+                                                "allOf": [
+                                                    {
+                                                        "$ref": "#/definitions/line-object"
+                                                    }
+                                                ]
+                                            },
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "type": {
+                                            "enum": [
+                                                "Multiple distance measurements"
+                                            ]
+                                        },
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "lines"],
+                                    "type": "object",
+                                },
+                                "MELL": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "ellipses": {
+                                            "items": {
+                                                "allOf": [
+                                                    {
+                                                        "$ref": "#/definitions/ellipse-object"
+                                                    }
+                                                ]
+                                            },
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "type": {
+                                            "enum": ["Multiple ellipses"]
+                                        },
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": [
+                                        "version",
+                                        "type",
+                                        "ellipses",
+                                    ],
+                                    "type": "object",
+                                },
+                                "MLIN": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "lines": {
+                                            "items": {
+                                                "$ref": "#/definitions/spline-object"
+                                            },
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "type": {"enum": ["Multiple lines"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["type", "version", "lines"],
+                                    "type": "object",
+                                },
+                                "MPOI": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "name": {"type": "string"},
+                                        "points": {
+                                            "items": {
+                                                "allOf": [
+                                                    {
+                                                        "$ref": "#/definitions/point-object"
+                                                    }
+                                                ]
+                                            },
+                                            "type": "array",
+                                        },
+                                        "type": {"enum": ["Multiple points"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "points"],
+                                    "type": "object",
+                                },
+                                "MPOL": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "name": {"type": "string"},
+                                        "polygons": {
+                                            "items": {
+                                                "$ref": "#/definitions/polygon-object"
+                                            },
+                                            "type": "array",
+                                        },
+                                        "type": {
+                                            "enum": ["Multiple polygons"]
+                                        },
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": [
+                                        "type",
+                                        "version",
+                                        "polygons",
+                                    ],
+                                    "type": "object",
+                                },
+                                "NUMB": {"type": "number"},
+                                "POIN": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "name": {"type": "string"},
+                                        "point": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["Point"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": ["version", "type", "point"],
+                                    "type": "object",
+                                },
+                                "POLY": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "groups": {
+                                            "items": {"type": "string"},
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "path_points": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "type": "array",
+                                        },
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "seed_point": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "sub_type": {"type": "string"},
+                                        "type": {"enum": ["Polygon"]},
+                                        "version": {
+                                            "$ref": "#/definitions/version-object"
+                                        },
+                                    },
+                                    "required": [
+                                        "seed_point",
+                                        "path_points",
+                                        "sub_type",
+                                        "groups",
+                                        "type",
+                                        "version",
+                                    ],
+                                    "type": "object",
+                                },
+                                "TEXT": {"type": "string"},
+                                "angle-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "lines": {
+                                            "items": {
+                                                "items": {
+                                                    "items": {
+                                                        "type": "number"
+                                                    },
+                                                    "maxItems": 3,
+                                                    "minItems": 3,
+                                                    "type": "array",
+                                                },
+                                                "maxItems": 2,
+                                                "minItems": 2,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 2,
+                                            "minItems": 2,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["Angle"]},
+                                    },
+                                    "required": ["lines"],
+                                    "type": "object",
+                                },
+                                "ellipse-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "major_axis": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 2,
+                                            "minItems": 2,
+                                            "type": "array",
+                                        },
+                                        "minor_axis": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "maxItems": 2,
+                                            "minItems": 2,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["Ellipse"]},
+                                    },
+                                    "required": ["major_axis", "minor_axis"],
+                                    "type": "object",
+                                },
+                                "line-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "end": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "start": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "type": {
+                                            "enum": ["Distance measurement"]
+                                        },
+                                    },
+                                    "required": ["start", "end"],
+                                    "type": "object",
+                                },
+                                "null": {"type": "null"},
+                                "point-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "name": {"type": "string"},
+                                        "point": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "type": {"enum": ["Point"]},
+                                    },
+                                    "required": ["point"],
+                                    "type": "object",
+                                },
+                                "polygon-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "groups": {
+                                            "items": {"type": "string"},
+                                            "type": "array",
+                                        },
+                                        "name": {"type": "string"},
+                                        "path_points": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "type": "array",
+                                        },
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "seed_point": {
+                                            "items": {"type": "number"},
+                                            "maxItems": 3,
+                                            "minItems": 3,
+                                            "type": "array",
+                                        },
+                                        "sub_type": {"type": "string"},
+                                        "type": {"enum": ["Polygon"]},
+                                    },
+                                    "required": [
+                                        "seed_point",
+                                        "path_points",
+                                        "sub_type",
+                                        "groups",
+                                    ],
+                                    "type": "object",
+                                },
+                                "spline-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "name": {"type": "string"},
+                                        "path_point_lists": {
+                                            "items": {
+                                                "items": {
+                                                    "items": {
+                                                        "type": "number"
+                                                    },
+                                                    "maxItems": 3,
+                                                    "minItems": 3,
+                                                    "type": "array",
+                                                },
+                                                "type": "array",
+                                            },
+                                            "type": "array",
+                                        },
+                                        "probability": {
+                                            "maximum": 1,
+                                            "minimum": 0,
+                                            "type": "number",
+                                        },
+                                        "seed_points": {
+                                            "items": {
+                                                "items": {"type": "number"},
+                                                "maxItems": 3,
+                                                "minItems": 3,
+                                                "type": "array",
+                                            },
+                                            "type": "array",
+                                        },
+                                        "type": {"enum": ["Line"]},
+                                    },
+                                    "required": [
+                                        "seed_points",
+                                        "path_point_lists",
+                                    ],
+                                    "type": "object",
+                                },
+                                "version-object": {
+                                    "additionalProperties": False,
+                                    "properties": {
+                                        "major": {
+                                            "minimum": 0,
+                                            "multipleOf": 1.0,
+                                            "type": "number",
+                                        },
+                                        "minor": {
+                                            "minimum": 0,
+                                            "multipleOf": 1.0,
+                                            "type": "number",
+                                        },
+                                    },
+                                    "required": ["major", "minor"],
+                                    "type": "object",
+                                },
+                            },
+                        }
+                    )
+                ],
+            ),
+        ),
+        migrations.AlterField(
+            model_name="question",
+            name="answer_type",
+            field=models.CharField(
+                choices=[
+                    ("TEXT", "Text"),
+                    ("BOOL", "Bool"),
+                    ("NUMB", "Number"),
+                    ("HEAD", "Heading"),
+                    ("2DBB", "2D bounding box"),
+                    ("M2DB", "Multiple 2D bounding boxes"),
+                    ("DIST", "Distance measurement"),
+                    ("MDIS", "Multiple distance measurements"),
+                    ("POIN", "Point"),
+                    ("MPOI", "Multiple points"),
+                    ("POLY", "Polygon"),
+                    ("MPOL", "Multiple polygons"),
+                    ("CHOI", "Choice"),
+                    ("MCHO", "Multiple choice"),
+                    ("MCHD", "Multiple choice dropdown"),
+                    ("MASK", "Mask"),
+                    ("LINE", "Line"),
+                    ("MLIN", "Multiple lines"),
+                    ("ANGL", "Angle"),
+                    ("MANG", "Multiple angles"),
+                    ("ELLI", "Ellipse"),
+                    ("MELL", "Multiple ellipses"),
+                    ("3ANG", "Three-point angle"),
+                    ("M3AN", "Multiple three-point angles"),
+                ],
+                max_length=4,
+            ),
+        ),
+        migrations.AlterField(
+            model_name="question",
+            name="widget",
+            field=models.CharField(
+                blank=True,
+                choices=[
+                    ("ACCEPT_REJECT", "Accept/Reject Findings"),
+                    ("NUMBER_INPUT", "Number Input"),
+                    ("NUMBER_RANGE", "Number Range"),
+                    ("TEXT_INPUT", "Text Input"),
+                    ("TEXT_AREA", "Text Area"),
+                    ("SELECT_MULTIPLE", "Select Multiple"),
+                    ("CHECKBOX_SELECT_MULTIPLE", "Checkbox Select Multiple"),
+                    ("SELECT", "Select"),
+                    ("RADIO_SELECT", "Radio Select"),
+                ],
+                max_length=24,
+            ),
+        ),
+    ]
diff --git a/app/grandchallenge/reader_studies/models.py b/app/grandchallenge/reader_studies/models.py
--- a/app/grandchallenge/reader_studies/models.py
+++ b/app/grandchallenge/reader_studies/models.py
@@ -923,8 +923,6 @@ class DisplaySetGroupObjectPermission(GroupObjectPermissionBase):
 class AnswerType(models.TextChoices):
     # WARNING: Do not change the display text, these are used in the front end
     TEXT = "TEXT", "Text"
-    SINGLE_LINE_TEXT = "STXT", "Single line text"
-    MULTI_LINE_TEXT = "MTXT", "Multi line text"
     BOOL = "BOOL", "Bool"
     NUMBER = "NUMB", "Number"
     HEADING = "HEAD", "Heading"
@@ -995,8 +993,6 @@ def get_widget_required_types():
 
 ANSWER_TYPE_TO_INTERFACE_KIND_MAP = {
     AnswerType.TEXT: [InterfaceKindChoices.STRING],
-    AnswerType.SINGLE_LINE_TEXT: [InterfaceKindChoices.STRING],
-    AnswerType.MULTI_LINE_TEXT: [InterfaceKindChoices.STRING],
     AnswerType.BOOL: [InterfaceKindChoices.BOOL],
     AnswerType.NUMBER: [
         InterfaceKindChoices.FLOAT,
@@ -1040,7 +1036,7 @@ def get_widget_required_types():
 
 class QuestionWidgetKindChoices(models.TextChoices):
     ACCEPT_REJECT = "ACCEPT_REJECT", "Accept/Reject Findings"
-    NUMBER_INPUT = "NUMBER_INPUT", "Number input"
+    NUMBER_INPUT = "NUMBER_INPUT", "Number Input"
     NUMBER_RANGE = "NUMBER_RANGE", "Number Range"
     TEXT_INPUT = "TEXT_INPUT", "Text Input"
     TEXT_AREA = "TEXT_AREA", "Text Area"
@@ -1058,8 +1054,6 @@ class QuestionWidgetKindChoices(models.TextChoices):
         QuestionWidgetKindChoices.TEXT_INPUT,
         QuestionWidgetKindChoices.TEXT_AREA,
     ],
-    AnswerType.SINGLE_LINE_TEXT: [],
-    AnswerType.MULTI_LINE_TEXT: [],
     AnswerType.BOOL: [],
     AnswerType.NUMBER: [
         QuestionWidgetKindChoices.NUMBER_INPUT,
@@ -1079,12 +1073,12 @@ class QuestionWidgetKindChoices(models.TextChoices):
     AnswerType.POLYGON: [],
     AnswerType.MULTIPLE_POLYGONS: [QuestionWidgetKindChoices.ACCEPT_REJECT],
     AnswerType.CHOICE: [
-        QuestionWidgetKindChoices.SELECT,
         QuestionWidgetKindChoices.RADIO_SELECT,
+        QuestionWidgetKindChoices.SELECT,
     ],
     AnswerType.MULTIPLE_CHOICE: [
-        QuestionWidgetKindChoices.SELECT_MULTIPLE,
         QuestionWidgetKindChoices.CHECKBOX_SELECT_MULTIPLE,
+        QuestionWidgetKindChoices.SELECT_MULTIPLE,
     ],
     AnswerType.MULTIPLE_CHOICE_DROPDOWN: [],
     AnswerType.MASK: [],
@@ -1106,8 +1100,6 @@ class QuestionWidgetKindChoices(models.TextChoices):
 }
 
 EMPTY_ANSWER_VALUES = {
-    AnswerType.SINGLE_LINE_TEXT: "",
-    AnswerType.MULTI_LINE_TEXT: "",
     AnswerType.TEXT: "",
     AnswerType.NUMBER: None,
     AnswerType.CHOICE: None,
@@ -1171,8 +1163,6 @@ class ScoringFunction(models.TextChoices):
     SCORING_FUNCTIONS = {ScoringFunction.ACCURACY: accuracy_score}
 
     EXAMPLE_FOR_ANSWER_TYPE = {
-        AnswerType.SINGLE_LINE_TEXT: "'\"answer\"'",
-        AnswerType.MULTI_LINE_TEXT: "'\"answer\\nanswer\\nanswer\"'",
         AnswerType.TEXT: "'\"answer\"'",
         AnswerType.NUMBER: "'1'",
         AnswerType.BOOL: "'true'",
@@ -1189,7 +1179,6 @@ class ScoringFunction(models.TextChoices):
     answer_type = models.CharField(
         max_length=4,
         choices=AnswerType.choices,
-        default=AnswerType.SINGLE_LINE_TEXT,
     )
     # Set blank because the requirement is dependent on answer_type and handled in the front end
     image_port = models.CharField(


Test patch:
diff --git a/app/tests/reader_studies_tests/test_api.py b/app/tests/reader_studies_tests/test_api.py
--- a/app/tests/reader_studies_tests/test_api.py
+++ b/app/tests/reader_studies_tests/test_api.py
@@ -280,14 +280,10 @@ def test_answer_creator_is_reader(client):
         (Question.AnswerType.NUMBER, 12, 201),
         (Question.AnswerType.NUMBER, "12", 400),
         (Question.AnswerType.NUMBER, True, 400),
-        (Question.AnswerType.SINGLE_LINE_TEXT, "dgfsgfds", 201),
-        (Question.AnswerType.SINGLE_LINE_TEXT, None, 400),
-        (Question.AnswerType.SINGLE_LINE_TEXT, True, 400),
-        (Question.AnswerType.SINGLE_LINE_TEXT, 12, 400),
-        (Question.AnswerType.MULTI_LINE_TEXT, "dgfsgfds", 201),
-        (Question.AnswerType.MULTI_LINE_TEXT, None, 400),
-        (Question.AnswerType.MULTI_LINE_TEXT, True, 400),
-        (Question.AnswerType.MULTI_LINE_TEXT, 12, 400),
+        (Question.AnswerType.TEXT, "dgfsgfds", 201),
+        (Question.AnswerType.TEXT, None, 400),
+        (Question.AnswerType.TEXT, True, 400),
+        (Question.AnswerType.TEXT, 12, 400),
         (Question.AnswerType.MULTIPLE_CHOICE, None, 400),
         (Question.AnswerType.MULTIPLE_CHOICE_DROPDOWN, None, 400),
         # Headings are always incorrect when answering
@@ -925,8 +921,6 @@ def test_answer_is_correct_type(client, answer_type, answer, expected):
     "answer_type,answer",
     (
         # Blank answers
-        (Question.AnswerType.SINGLE_LINE_TEXT, ""),
-        (Question.AnswerType.MULTI_LINE_TEXT, ""),
         (Question.AnswerType.TEXT, ""),
         # Null answers
         (Question.AnswerType.NUMBER, None),
@@ -1090,8 +1084,7 @@ def test_ground_truth_is_excluded(client):
     (
         (Question.AnswerType.BOOL, True),
         (Question.AnswerType.NUMBER, 12),
-        (Question.AnswerType.SINGLE_LINE_TEXT, "dgfsgfds"),
-        (Question.AnswerType.MULTI_LINE_TEXT, "dgfsgfds\ndgfsgfds"),
+        (Question.AnswerType.TEXT, "dgfsgfds"),
         (
             Question.AnswerType.BOUNDING_BOX_2D,
             {
@@ -2107,9 +2100,7 @@ def test_display_set_delete(client):
 def test_total_edit_duration(client):
     rs = ReaderStudyFactory(allow_answer_modification=True)
     ds = DisplaySetFactory(reader_study=rs)
-    q = QuestionFactory(
-        reader_study=rs, answer_type=AnswerType.SINGLE_LINE_TEXT
-    )
+    q = QuestionFactory(reader_study=rs, answer_type=AnswerType.TEXT)
     u = UserFactory()
 
     rs.add_reader(u)
diff --git a/app/tests/reader_studies_tests/test_forms.py b/app/tests/reader_studies_tests/test_forms.py
--- a/app/tests/reader_studies_tests/test_forms.py
+++ b/app/tests/reader_studies_tests/test_forms.py
@@ -235,7 +235,8 @@ def test_question_create(client):
             method=client.post,
             data={
                 "question_text": "What?",
-                "answer_type": "STXT",
+                "answer_type": AnswerType.TEXT,
+                "widget": QuestionWidgetKindChoices.TEXT_INPUT,
                 "order": 1,
                 "image_port": "",
                 "direction": "H",
@@ -270,7 +271,7 @@ def test_question_update(client):
     question = QuestionFactory(
         question_text="foo",
         reader_study=rs,
-        answer_type=Question.AnswerType.SINGLE_LINE_TEXT,
+        answer_type=Question.AnswerType.TEXT,
         direction=Question.Direction.HORIZONTAL,
         order=100,
     )
@@ -298,7 +299,7 @@ def test_question_update(client):
     assert response.status_code == 200
 
     assert question.question_text == "foo"
-    assert question.answer_type == Question.AnswerType.SINGLE_LINE_TEXT
+    assert question.answer_type == Question.AnswerType.TEXT
     assert question.direction == Question.Direction.HORIZONTAL
     assert question.order == 100
     assert question.interface is None
@@ -379,7 +380,7 @@ def test_question_update(client):
         instance=question,
         data={
             "question_text": "foo",
-            "answer_type": Question.AnswerType.SINGLE_LINE_TEXT,
+            "answer_type": Question.AnswerType.TEXT,
             "direction": Question.Direction.HORIZONTAL,
             "overlay_segments": '[{"name": "s1", "visible": true, "voxel_value": 0}]',
             "order": 100,
@@ -407,8 +408,6 @@ def test_question_update(client):
     "answer_type,interface_kind",
     (
         (AnswerType.TEXT, InterfaceKindChoices.STRING),
-        (AnswerType.SINGLE_LINE_TEXT, InterfaceKindChoices.STRING),
-        (AnswerType.MULTI_LINE_TEXT, InterfaceKindChoices.STRING),
         (AnswerType.BOOL, InterfaceKindChoices.BOOL),
         (AnswerType.NUMBER, InterfaceKindChoices.FLOAT),
         (AnswerType.NUMBER, InterfaceKindChoices.INTEGER),
@@ -469,9 +468,6 @@ def test_question_form_interface_field_no_answer_type():
 @pytest.mark.parametrize(
     "answer_type,port,questions_created",
     (
-        ("STXT", "", 1),
-        ("STXT", "M", 0),
-        ("STXT", "S", 0),
         ("HEAD", "", 1),
         ("HEAD", "M", 0),
         ("HEAD", "S", 0),
@@ -875,7 +871,7 @@ def test_reader_study_add_ground_truth(client, settings):
     q = QuestionFactory(
         reader_study=rs,
         question_text="bar",
-        answer_type=Question.AnswerType.SINGLE_LINE_TEXT,
+        answer_type=Question.AnswerType.TEXT,
     )
     q0 = QuestionFactory(
         reader_study=rs,
@@ -1067,7 +1063,7 @@ def test_reader_study_add_ground_truth_ds(client, settings):
     QuestionFactory(
         reader_study=rs,
         question_text="bar",
-        answer_type=Question.AnswerType.SINGLE_LINE_TEXT,
+        answer_type=Question.AnswerType.TEXT,
     )
 
     civ = ComponentInterfaceValueFactory(image=ImageFactory())
@@ -1122,7 +1118,7 @@ def test_display_set_update_form(form_class, file_widget):
     assert isinstance(form.fields["slug-2"].widget, JSONEditorWidget)
 
     ci = ComponentInterfaceFactory(kind="STR", title="slug-3")
-    QuestionFactory(reader_study=rs, answer_type="STXT", interface=ci)
+    QuestionFactory(reader_study=rs, answer_type=AnswerType.TEXT, interface=ci)
     del rs.values_for_interfaces
     form = form_class(user=user, instance=instance, base_obj=rs)
     assert sorted(form.fields.keys()) == [
@@ -1243,18 +1239,16 @@ def test_display_set_add_interface_form():
 @pytest.mark.parametrize(
     "answer_type, choices",
     (
-        (AnswerType.SINGLE_LINE_TEXT, BLANK_CHOICE_DASH),
         (
             AnswerType.TEXT,
             [("TEXT_INPUT", "Text Input"), ("TEXT_AREA", "Text Area")],
         ),
-        (AnswerType.MULTI_LINE_TEXT, BLANK_CHOICE_DASH),
         (AnswerType.BOOL, BLANK_CHOICE_DASH),
         (
             AnswerType.NUMBER,
             [
                 BLANK_CHOICE_DASH[0],
-                ("NUMBER_INPUT", "Number input"),
+                ("NUMBER_INPUT", "Number Input"),
                 ("NUMBER_RANGE", "Number Range"),
             ],
         ),
@@ -1317,16 +1311,16 @@ def test_display_set_add_interface_form():
         (
             AnswerType.CHOICE,
             [
-                ("SELECT", "Select"),
                 ("RADIO_SELECT", "Radio Select"),
+                ("SELECT", "Select"),
             ],
         ),
         (
             AnswerType.MULTIPLE_CHOICE,
             [
                 BLANK_CHOICE_DASH[0],
-                ("SELECT_MULTIPLE", "Select Multiple"),
                 ("CHECKBOX_SELECT_MULTIPLE", "Checkbox Select Multiple"),
+                ("SELECT_MULTIPLE", "Select Multiple"),
             ],
         ),
         (AnswerType.MULTIPLE_CHOICE_DROPDOWN, BLANK_CHOICE_DASH),
@@ -1340,7 +1334,7 @@ def test_question_form_answer_widget_choices(answer_type, choices):
 
 @pytest.mark.django_db
 def test_question_form_initial_widget():
-    qu = QuestionFactory()
+    qu = QuestionFactory(answer_type=AnswerType.TEXT)
     form = QuestionForm(instance=qu)
     assert not form.initial_widget()
 
diff --git a/app/tests/reader_studies_tests/test_models.py b/app/tests/reader_studies_tests/test_models.py
--- a/app/tests/reader_studies_tests/test_models.py
+++ b/app/tests/reader_studies_tests/test_models.py
@@ -677,7 +677,10 @@ def test_display_set_description():
 
 @pytest.mark.django_db
 def test_question_interface():
-    q = QuestionFactory(answer_type=AnswerType.SINGLE_LINE_TEXT)
+    q = QuestionFactory(
+        answer_type=AnswerType.TEXT,
+        widget=QuestionWidgetKindChoices.TEXT_INPUT,
+    )
     ci_str = ComponentInterfaceFactory(kind=InterfaceKindChoices.STRING)
     q.interface = ci_str
     q.clean()
@@ -696,7 +699,7 @@ def test_question_interface():
 
     assert e.value.message == (
         f"The interface {ci_img} is not allowed for this "
-        f"question type ({AnswerType.SINGLE_LINE_TEXT})"
+        f"question type ({AnswerType.TEXT})"
     )
 
     q.refresh_from_db()
diff --git a/app/tests/reader_studies_tests/test_views.py b/app/tests/reader_studies_tests/test_views.py
--- a/app/tests/reader_studies_tests/test_views.py
+++ b/app/tests/reader_studies_tests/test_views.py
@@ -47,7 +47,7 @@ def test_example_ground_truth(client, tmpdir):
         QuestionFactory(
             reader_study=rs,
             question_text="q3",
-            answer_type=Question.AnswerType.SINGLE_LINE_TEXT,
+            answer_type=Question.AnswerType.TEXT,
         ),
     )
     CategoricalOptionFactory(question=q2, title="option")
diff --git a/app/tests/reader_studies_tests/validation_tests.py b/app/tests/reader_studies_tests/validation_tests.py
--- a/app/tests/reader_studies_tests/validation_tests.py
+++ b/app/tests/reader_studies_tests/validation_tests.py
@@ -1,20 +1,19 @@
 import pytest
 
-from grandchallenge.reader_studies.models import Question
+from grandchallenge.reader_studies.models import AnswerType, Question
 
 ANSWER_TYPE_NAMES_AND_ANSWERS = {
-    "STXT": "string test",
-    "MTXT": "multiline string\ntest",
-    "NUMB": 12,
-    "BOOL": True,
-    "2DBB": {
+    AnswerType.TEXT: "multiline string\ntest",
+    AnswerType.NUMBER: 12,
+    AnswerType.BOOL: True,
+    AnswerType.BOUNDING_BOX_2D: {
         "version": {"major": 1, "minor": 0},
         "type": "2D bounding box",
         "name": "test_name",
         "corners": [[0, 0, 0], [10, 0, 0], [10, 10, 0], [0, 10, 0]],
         "probability": 0.2,
     },
-    "M2DB": {
+    AnswerType.MULTIPLE_2D_BOUNDING_BOXES: {
         "type": "Multiple 2D bounding boxes",
         "boxes": [
             {
@@ -28,7 +27,7 @@
         ],
         "version": {"major": 1, "minor": 0},
     },
-    "DIST": {
+    AnswerType.DISTANCE_MEASUREMENT: {
         "version": {"major": 1, "minor": 0},
         "type": "Distance measurement",
         "name": "test_name",
@@ -36,7 +35,7 @@
         "end": [10, 0, 0],
         "probability": 1.0,
     },
-    "MDIS": {
+    AnswerType.MULTIPLE_DISTANCE_MEASUREMENTS: {
         "version": {"major": 1, "minor": 0},
         "type": "Multiple distance measurements",
         "name": "test_name",
@@ -45,14 +44,14 @@
             {"start": [0, 0, 0], "end": [10, 0, 0], "probability": 0.5},
         ],
     },
-    "POIN": {
+    AnswerType.POINT: {
         "version": {"major": 1, "minor": 0},
         "type": "Point",
         "name": "test_name",
         "point": [0, 0, 0],
         "probability": 0.41,
     },
-    "MPOI": {
+    AnswerType.MULTIPLE_POINTS: {
         "version": {"major": 1, "minor": 0},
         "type": "Multiple points",
         "name": "test_name",
@@ -61,7 +60,7 @@
             {"point": [0, 0, 0], "probability": 0.2},
         ],
     },
-    "POLY": {
+    AnswerType.POLYGON: {
         "version": {"major": 1, "minor": 0},
         "type": "Polygon",
         "name": "test_name",
@@ -71,7 +70,7 @@
         "groups": ["a", "b"],
         "probability": 0.3,
     },
-    "MPOL": {
+    AnswerType.MULTIPLE_POLYGONS: {
         "version": {"major": 1, "minor": 0},
         "type": "Multiple polygons",
         "name": "test_name",
@@ -93,7 +92,7 @@
             },
         ],
     },
-    "LINE": {
+    AnswerType.LINE: {
         "version": {"major": 1, "minor": 0},
         "type": "Line",
         "name": "test_name",
@@ -104,7 +103,7 @@
         ],
         "probability": 0.3,
     },
-    "MLIN": {
+    AnswerType.MULTIPLE_LINES: {
         "version": {"major": 1, "minor": 0},
         "type": "Multiple lines",
         "name": "test_name",
@@ -129,7 +128,7 @@
             },
         ],
     },
-    "ANGL": {
+    AnswerType.ANGLE: {
         "version": {"major": 1, "minor": 0},
         "type": "Angle",
         "name": "test_name",
@@ -139,7 +138,7 @@
         ],
         "probability": 0.3,
     },
-    "MANG": {
+    AnswerType.MULTIPLE_ANGLES: {
         "version": {"major": 1, "minor": 0},
         "type": "Multiple angles",
         "name": "test_name",
@@ -162,7 +161,7 @@
             },
         ],
     },
-    "ELLI": {
+    AnswerType.ELLIPSE: {
         "version": {"major": 1, "minor": 0},
         "type": "Ellipse",
         "name": "test_name",
@@ -170,7 +169,7 @@
         "minor_axis": [[1, 1, 1], [1, 1, 1]],
         "probability": 0.3,
     },
-    "MELL": {
+    AnswerType.MULTIPLE_ELLIPSES: {
         "version": {"major": 1, "minor": 0},
         "type": "Multiple ellipses",
         "name": "test_name",
@@ -188,7 +187,7 @@
             },
         ],
     },
-    "3ANG": {
+    AnswerType.THREE_POINT_ANGLE: {
         "version": {"major": 1, "minor": 0},
         "name": "Some annotation",
         "type": "Three-point angle",
@@ -199,7 +198,7 @@
         ],
         "probability": 0.92,
     },
-    "M3AN": {
+    AnswerType.MULTIPLE_THREE_POINT_ANGLES: {
         "version": {"major": 1, "minor": 0},
         "name": "Some annotations",
         "type": "Multiple three-point angles",
@@ -246,14 +245,9 @@ def test_answer_type_annotation_header_schema_fails(
 
 
 def test_answer_type_annotation_schema_mismatch():
-    # Answers to STXT are valid for MTXT as well, that's why STXT is excluded
-    # Other than that, each answer is only valid for a single answer type
-    unique_answer_types = [
-        key for key in ANSWER_TYPE_NAMES_AND_ANSWERS.keys() if key != "STXT"
-    ]
-    for answer_type in unique_answer_types:
+    for answer_type in ANSWER_TYPE_NAMES_AND_ANSWERS.keys():
         answer = ANSWER_TYPE_NAMES_AND_ANSWERS[answer_type]
-        for answer_type_check in unique_answer_types:
+        for answer_type_check in ANSWER_TYPE_NAMES_AND_ANSWERS.keys():
             assert Question(answer_type=answer_type_check).is_answer_valid(
                 answer=answer
             ) == (answer_type == answer_type_check)
@@ -268,30 +262,29 @@ def test_new_answer_type_listed():
 @pytest.mark.parametrize(
     "answer_type,allow_null",
     [
-        ["STXT", False],
-        ["MTXT", False],
-        ["BOOL", True],
-        ["NUMB", True],
-        ["2DBB", True],
-        ["M2DB", True],
-        ["DIST", True],
-        ["MDIS", True],
-        ["POIN", True],
-        ["MPOI", True],
-        ["POLY", True],
-        ["MPOL", True],
-        ["CHOI", True],
-        ["MCHO", False],
-        ["MCHD", False],
-        ["MASK", True],
-        ["LINE", True],
-        ["MLIN", True],
-        ["ANGL", True],
-        ["MANG", True],
-        ["ELLI", True],
-        ["MELL", True],
-        ["3ANG", True],
-        ["M3AN", True],
+        [AnswerType.TEXT, False],
+        [AnswerType.BOOL, True],
+        [AnswerType.NUMBER, True],
+        [AnswerType.BOUNDING_BOX_2D, True],
+        [AnswerType.MULTIPLE_2D_BOUNDING_BOXES, True],
+        [AnswerType.DISTANCE_MEASUREMENT, True],
+        [AnswerType.MULTIPLE_DISTANCE_MEASUREMENTS, True],
+        [AnswerType.POINT, True],
+        [AnswerType.MULTIPLE_POINTS, True],
+        [AnswerType.POLYGON, True],
+        [AnswerType.MULTIPLE_POLYGONS, True],
+        [AnswerType.CHOICE, True],
+        [AnswerType.MULTIPLE_CHOICE, False],
+        [AnswerType.MULTIPLE_CHOICE_DROPDOWN, False],
+        [AnswerType.MASK, True],
+        [AnswerType.LINE, True],
+        [AnswerType.MULTIPLE_LINES, True],
+        [AnswerType.ANGLE, True],
+        [AnswerType.MULTIPLE_ANGLES, True],
+        [AnswerType.ELLIPSE, True],
+        [AnswerType.MULTIPLE_ELLIPSES, True],
+        [AnswerType.THREE_POINT_ANGLE, True],
+        [AnswerType.MULTIPLE_THREE_POINT_ANGLES, True],
     ],
 )
 def test_answer_type_allows_null(answer_type, allow_null):