Jelajahi Sumber

14852 delete event-rule when delete script

Arthur 1 tahun lalu
induk
melakukan
4b21cf604b
2 mengubah file dengan 13 tambahan dan 2 penghapusan
  1. 5 2
      netbox/extras/api/serializers.py
  2. 8 0
      netbox/extras/models/scripts.py

+ 5 - 2
netbox/extras/api/serializers.py

@@ -89,8 +89,11 @@ class EventRuleSerializer(NetBoxModelSerializer):
         # We need to manually instantiate the serializer for scripts
         if instance.action_type == EventRuleActionChoices.SCRIPT:
             script_name = instance.action_parameters['script_name']
-            script = instance.action_object.scripts[script_name]()
-            return NestedScriptSerializer(script, context=context).data
+            if script_name in instance.action_object.scripts:
+                script = instance.action_object.scripts[script_name]()
+                return NestedScriptSerializer(script, context=context).data
+            else:
+                return None
         else:
             serializer = get_serializer_for_model(
                 model=instance.action_object_type.model_class(),

+ 8 - 0
netbox/extras/models/scripts.py

@@ -2,6 +2,7 @@ import inspect
 import logging
 from functools import cached_property
 
+from django.contrib.contenttypes.fields import GenericRelation
 from django.db import models
 from django.urls import reverse
 from django.utils.translation import gettext_lazy as _
@@ -41,6 +42,13 @@ class ScriptModule(PythonModuleMixin, JobsMixin, ManagedFile):
     """
     objects = ScriptModuleManager()
 
+    event_rules = GenericRelation(
+        to='extras.EventRule',
+        content_type_field='action_object_type',
+        object_id_field='action_object_id',
+        for_concrete_model=False
+    )
+
     class Meta:
         proxy = True
         verbose_name = _('script module')