Refactor SplitMultiSelectWidget to use class attributes for widget classes

This commit is contained in:
Jason Novinger
2026-03-03 16:40:52 -06:00
parent 667702e0c2
commit de41d0d3ae

View File

@@ -151,14 +151,16 @@ class SplitMultiSelectWidget(forms.MultiWidget):
be enabled only if the order of the selected choices is significant. be enabled only if the order of the selected choices is significant.
""" """
template_name = 'widgets/splitmultiselect.html' template_name = 'widgets/splitmultiselect.html'
available_widget_class = AvailableOptions
selected_widget_class = SelectedOptions
def __init__(self, choices, attrs=None, ordering=False): def __init__(self, choices, attrs=None, ordering=False):
widgets = [ widgets = [
AvailableOptions( self.available_widget_class(
attrs={'size': 8}, attrs={'size': 8},
choices=choices choices=choices
), ),
SelectedOptions( self.selected_widget_class(
attrs={'size': 8, 'class': 'select-all'}, attrs={'size': 8, 'class': 'select-all'},
choices=choices choices=choices
), ),
@@ -220,20 +222,8 @@ class ObjectTypeSplitMultiSelectWidget(SplitMultiSelectWidget):
SplitMultiSelectWidget that adds data-model-key attributes to options. SplitMultiSelectWidget that adds data-model-key attributes to options.
Used by ObjectPermissionForm to enable JS show/hide of custom actions. Used by ObjectPermissionForm to enable JS show/hide of custom actions.
""" """
available_widget_class = ObjectTypeAvailableOptions
def __init__(self, choices, attrs=None, ordering=False): selected_widget_class = ObjectTypeSelectedOptions
widgets = [
ObjectTypeAvailableOptions(
attrs={'size': 8},
choices=choices
),
ObjectTypeSelectedOptions(
attrs={'size': 8, 'class': 'select-all'},
choices=choices
),
]
forms.MultiWidget.__init__(self, widgets, attrs)
self.ordering = ordering
def set_model_key_map(self, pk_to_model_key): def set_model_key_map(self, pk_to_model_key):
for widget in self.widgets: for widget in self.widgets: