diff --git a/netbox/extras/api/nested_serializers.py b/netbox/extras/api/nested_serializers.py index 4e156ef47..f2076f44c 100644 --- a/netbox/extras/api/nested_serializers.py +++ b/netbox/extras/api/nested_serializers.py @@ -25,7 +25,7 @@ class NestedEventRuleSerializer(WritableNestedSerializer): class Meta: model = models.EventRule - fields = ['id', 'display', 'name'] + fields = ['id', 'url', 'display', 'name'] class NestedWebhookSerializer(WritableNestedSerializer): @@ -117,10 +117,18 @@ class NestedJournalEntrySerializer(WritableNestedSerializer): class NestedScriptModuleSerializer(WritableNestedSerializer): + # url = serializers.SerializerMethodField() + url = serializers.HyperlinkedIdentityField( + view_name='extras-api:script-detail', + lookup_field='full_name', + lookup_url_kwarg='pk' + ) + name = serializers.CharField(read_only=True) + display = serializers.SerializerMethodField(read_only=True) class Meta: model = models.ScriptModule - fields = ['id', 'name', 'created'] + fields = ['id', 'url', 'display', 'name'] def get_display(self, obj): return f'{obj.name} ({obj.module})' diff --git a/netbox/extras/api/serializers.py b/netbox/extras/api/serializers.py index 561c0fc0a..669bb5175 100644 --- a/netbox/extras/api/serializers.py +++ b/netbox/extras/api/serializers.py @@ -83,12 +83,18 @@ class EventRuleSerializer(NetBoxModelSerializer): @extend_schema_field(OpenApiTypes.OBJECT) def get_action_object(self, instance): - serializer = get_serializer_for_model( - model=instance.action_object_type.model_class(), - prefix=NESTED_SERIALIZER_PREFIX - ) context = {'request': self.context['request']} - return serializer(instance.action_object, context=context).data + if instance.action_type == EventRuleActionChoices.WEBHOOK: + serializer = get_serializer_for_model( + model=instance.action_object_type.model_class(), + prefix=NESTED_SERIALIZER_PREFIX + ) + return serializer(instance.action_object, context=context).data + elif instance.action_type == EventRuleActionChoices.SCRIPT: + from extras.api.nested_serializers import NestedScriptModuleSerializer + module_id, script_name = instance.action_parameters['script_choice'].split(":", maxsplit=1) + script = instance.action_object.scripts[script_name]() + return NestedScriptModuleSerializer(script, context=context).data # diff --git a/netbox/extras/forms/model_forms.py b/netbox/extras/forms/model_forms.py index 87d567237..5c4d3c0ce 100644 --- a/netbox/extras/forms/model_forms.py +++ b/netbox/extras/forms/model_forms.py @@ -336,7 +336,11 @@ class EventRuleForm(NetBoxModelForm): self.cleaned_data['action_object_type'] = ContentType.objects.get_for_model(script_module, for_concrete_model=False) self.cleaned_data['action_object_id'] = script_module.id script = script_module.scripts[script_name]() - self.cleaned_data['action_parameters'] = {'script_choice': action_choice, 'script_full_name': script.full_name} + self.cleaned_data['action_parameters'] = { + 'script_choice': action_choice, + 'script_name': script.name, + 'script_full_name': script.full_name, + } return self.cleaned_data