Enhance CaseCollectionForm: replace collection_type field with radio buttons and add custom styling

This commit is contained in:
Ross
2025-11-15 23:02:12 +00:00
parent 478dcb7217
commit 3312f3058a
3 changed files with 78 additions and 1 deletions
+20 -1
View File
@@ -142,6 +142,25 @@ class CaseCollectionForm(ModelForm):
ModelForm.__init__(self, *args, **kwargs)
super(CaseCollectionForm, self).__init__(*args, **kwargs)
# Render collection_type as radio buttons and ensure it appears near the top
if "collection_type" in self.fields:
# Replace the model field with an explicit ChoiceField that uses RadioSelect
original = self.fields["collection_type"]
choices = getattr(original, "choices", ())
initial = original.initial if hasattr(original, "initial") else None
required = original.required
label = original.label
widget = RadioSelect(attrs={"class": "btn-check"})
# assign custom template for rendering as button group
#widget.template_name = "widgets/radioselect_buttons.html"
self.fields["collection_type"] = forms.ChoiceField(
choices=choices,
widget=widget,
initial=initial,
required=required,
label=label,
)
# Identify show_ fields
show_fields = [f for f in self.fields if f.startswith("show_")]
show_pre_fields = [f for f in show_fields if f.endswith("_pre")]
@@ -187,6 +206,7 @@ class CaseCollectionForm(ModelForm):
Fieldset(
"Collection Details",
"name",
Field("collection_type", css_class="mb-2"),
Fieldset(
"Dates",
"restrict_to_dates",
@@ -214,7 +234,6 @@ class CaseCollectionForm(ModelForm):
"exam_mode",
"self_review",
"feedback_once_collection_complete",
"collection_type",
"viewer_mode",
"question_time_limit",
"prerequisites",