Pārlūkot izejas kodu

#7205: Handle `null_option` in dynamic multi-select choices field

thatmattlove 4 gadi atpakaļ
vecāks
revīzija
49617a595d
1 mainītis faili ar 10 papildinājumiem un 0 dzēšanām
  1. 10 0
      netbox/utilities/forms/fields.py

+ 10 - 0
netbox/utilities/forms/fields.py

@@ -477,3 +477,13 @@ class DynamicModelMultipleChoiceField(DynamicModelChoiceMixin, forms.ModelMultip
     """
     filter = django_filters.ModelMultipleChoiceFilter
     widget = widgets.APISelectMultiple
+
+    def clean(self, value: list[str]):
+        """
+        When null option is enabled and "None" is sent as part of a form to be submitted, it is sent as the
+        string 'null'.  This will check for that condition and gracefully handle the conversion to a NoneType.
+        """
+        if self.null_option is not None and settings.FILTERS_NULL_CHOICE_VALUE in value:
+            value = [v for v in value if v != settings.FILTERS_NULL_CHOICE_VALUE]
+            return [self.null_option, *value]
+        return super().clean(value)