Procházet zdrojové kódy

Fixes #11032 - Replication fields broken in custom validation (#11698)

* Fixes #11032 - Replication fields broken in custom validation

* Use getattr instead of hasattr to make sure custom validation is triggered as normal

---------

Co-authored-by: kkthxbye-code <>
kkthxbye před 3 roky
rodič
revize
91705aa9fd

+ 4 - 0
netbox/netbox/models/features.py

@@ -257,6 +257,10 @@ class CustomValidationMixin(models.Model):
     def clean(self):
     def clean(self):
         super().clean()
         super().clean()
 
 
+        # If the instance is a base for replications, skip custom validation
+        if getattr(self, '_replicated_base', False):
+            return
+
         # Send the post_clean signal
         # Send the post_clean signal
         post_clean.send(sender=self.__class__, instance=self)
         post_clean.send(sender=self.__class__, instance=self)
 
 

+ 4 - 0
netbox/netbox/views/generic/object_views.py

@@ -436,6 +436,10 @@ class ComponentCreateView(GetReturnURLMixin, BaseObjectView):
         form = self.initialize_form(request)
         form = self.initialize_form(request)
         instance = self.alter_object(self.queryset.model(), request)
         instance = self.alter_object(self.queryset.model(), request)
 
 
+        # Note that the form instance is a replicated field base
+        # This is needed to avoid running custom validators multiple times
+        form.instance._replicated_base = hasattr(self.form, "replication_fields")
+
         if form.is_valid():
         if form.is_valid():
             new_components = []
             new_components = []
             data = deepcopy(request.POST)
             data = deepcopy(request.POST)