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

This commit is contained in:
Brian Tiemann 2024-12-17 18:00:10 -05:00
parent 13c26ccb0c
commit bf82101e84

View File

@ -1,6 +1,8 @@
from django.apps import apps from django.apps import apps
from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.fields import GenericForeignKey
from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _
from dcim.constants import LOCATION_SCOPE_TYPES from dcim.constants import LOCATION_SCOPE_TYPES
__all__ = ( __all__ = (
@ -84,6 +86,16 @@ class CachedScopeMixin(models.Model):
class Meta: class Meta:
abstract = True 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): def save(self, *args, **kwargs):
# Cache objects associated with the terminating object (for filtering) # Cache objects associated with the terminating object (for filtering)
self.cache_related_objects() self.cache_related_objects()