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.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()