ソースを参照

Fixes: #18203 - Validate that scope is selected if scope type is specified (#18254)

* Validate that a scope has been selected if a scope_type is specified, on CachedScopeMixin models

* Cleaner logic

* Call super().clean() after validating scope_type/scope
bctiemann 1 年間 前
コミット
0cda10a204
1 ファイル変更12 行追加0 行削除
  1. 12 0
      netbox/dcim/models/mixins.py

+ 12 - 0
netbox/dcim/models/mixins.py

@@ -1,6 +1,8 @@
 from django.apps import apps
 from django.contrib.contenttypes.fields import GenericForeignKey
+from django.core.exceptions import ValidationError
 from django.db import models
+from django.utils.translation import gettext_lazy as _
 from dcim.constants import LOCATION_SCOPE_TYPES
 
 __all__ = (
@@ -84,6 +86,16 @@ class CachedScopeMixin(models.Model):
     class Meta:
         abstract = True
 
+    def clean(self):
+        if self.scope_type and not self.scope:
+            scope_type = self.scope_type.model_class()
+            raise ValidationError({
+                'scope': _(
+                    "Please select a {scope_type}."
+                ).format(scope_type=scope_type._meta.model_name)
+            })
+        super().clean()
+
     def save(self, *args, **kwargs):
         # Cache objects associated with the terminating object (for filtering)
         self.cache_related_objects()