Просмотр исходного кода

Fixes #12400: Validate default values for object and multi-object custom fields

jeremystretch 2 лет назад
Родитель
Сommit
cc3b95bdb0
2 измененных файлов с 14 добавлено и 0 удалено
  1. 1 0
      docs/release-notes/version-3.5.md
  2. 13 0
      netbox/extras/models/customfields.py

+ 1 - 0
docs/release-notes/version-3.5.md

@@ -8,6 +8,7 @@
 * [#12384](https://github.com/netbox-community/netbox/issues/12384) - Add a three-second timeout for RSS reader widget
 * [#12395](https://github.com/netbox-community/netbox/issues/12395) - Fix "create & add another" action for objects with custom fields
 * [#12396](https://github.com/netbox-community/netbox/issues/12396) - Provider account should not be a required field in REST API serializer
+* [#12400](https://github.com/netbox-community/netbox/issues/12400) - Validate default values for object and multi-object custom fields
 * [#12401](https://github.com/netbox-community/netbox/issues/12401) - Support the creation of front ports without a pre-populated device ID
 * [#12405](https://github.com/netbox-community/netbox/issues/12405) - Fix filtering for VLAN groups displayed under site view
 * [#12412](https://github.com/netbox-community/netbox/issues/12412) - Device/VM interface MAC addresses can be nullified via REST API

+ 13 - 0
netbox/extras/models/customfields.py

@@ -606,5 +606,18 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel):
                         f"Invalid choice(s) ({', '.join(value)}). Available choices are: {', '.join(self.choices)}"
                     )
 
+            # Validate selected object
+            elif self.type == CustomFieldTypeChoices.TYPE_OBJECT:
+                if type(value) is not int:
+                    raise ValidationError(f"Value must be an object ID, not {type(value).__name__}")
+
+            # Validate selected objects
+            elif self.type == CustomFieldTypeChoices.TYPE_MULTIOBJECT:
+                if type(value) is not list:
+                    raise ValidationError(f"Value must be a list of object IDs, not {type(value).__name__}")
+                for id in value:
+                    if type(id) is not int:
+                        raise ValidationError(f"Found invalid object ID: {id}")
+
         elif self.required:
             raise ValidationError("Required field cannot be empty.")