From bf82101e84b61a2c3eae44947c33de26926c756d Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Tue, 17 Dec 2024 18:00:10 -0500 Subject: [PATCH] Validate that a scope has been selected if a scope_type is specified, on CachedScopeMixin models --- netbox/dcim/models/mixins.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/netbox/dcim/models/mixins.py b/netbox/dcim/models/mixins.py index ac4d7dab9..8bfa76572 100644 --- a/netbox/dcim/models/mixins.py +++ b/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: + scope_type = self.scope_type.model_class() + if not self.scope: + raise ValidationError({ + 'scope': _( + "Please select a {scope_type}." + ).format(scope_type=scope_type._meta.model_name) + }) + def save(self, *args, **kwargs): # Cache objects associated with the terminating object (for filtering) self.cache_related_objects()