diff --git a/netbox/core/models/files.py b/netbox/core/models/files.py index 5a321bdc3..7b626a441 100644 --- a/netbox/core/models/files.py +++ b/netbox/core/models/files.py @@ -89,6 +89,9 @@ class ManagedFile(SyncedDataMixin, models.Model): def clean(self): super().clean() + if self.data_file and not self.file_path: + self.file_path = os.path.basename(self.data_path) + # Ensure that the file root and path make a unique pair if self._meta.model.objects.filter(file_root=self.file_root, file_path=self.file_path).exclude(pk=self.pk).exists(): raise ValidationError( diff --git a/netbox/extras/models/scripts.py b/netbox/extras/models/scripts.py index e857e59b7..06a22f3e0 100644 --- a/netbox/extras/models/scripts.py +++ b/netbox/extras/models/scripts.py @@ -137,9 +137,13 @@ class ScriptModule(PythonModuleMixin, JobsMixin, ManagedFile): Syncs the file-based module to the database, adding and removing individual Script objects in the database as needed. """ - db_classes = { - script.name: script for script in self.scripts.all() - } + if self.id: + db_classes = { + script.name: script for script in self.scripts.all() + } + else: + db_classes = {} + db_classes_set = set(db_classes.keys()) module_classes_set = set(self.module_scripts.keys()) @@ -158,11 +162,11 @@ class ScriptModule(PythonModuleMixin, JobsMixin, ManagedFile): def sync_data(self): super().sync_data() - self.sync_classes() def save(self, *args, **kwargs): self.file_root = ManagedFileRootPathChoices.SCRIPTS return super().save(*args, **kwargs) + self.sync_classes() @receiver(post_save, sender=ScriptModule)