diff --git a/netbox/extras/migrations/0107_alter_script_options.py b/netbox/extras/migrations/0107_alter_script_options.py index 25988d7e4..88a24e465 100644 --- a/netbox/extras/migrations/0107_alter_script_options.py +++ b/netbox/extras/migrations/0107_alter_script_options.py @@ -19,7 +19,7 @@ def update_scripts(apps, schema_editor): ) # update all jobs associated with this module/name to point to the new script obj - module.jobs.filter(name=name).update(object_type=ct, object_id=obj.id) + module.jobs.filter(name=script).update(object_type=ct, object_id=obj.id) class Migration(migrations.Migration): diff --git a/netbox/extras/models/scripts.py b/netbox/extras/models/scripts.py index f39ef2e44..147cb6406 100644 --- a/netbox/extras/models/scripts.py +++ b/netbox/extras/models/scripts.py @@ -50,11 +50,6 @@ class Script(EventRulesMixin, JobsMixin, models.Model): def python_class(self): return self.module.get_module_scripts.get(self.name) - def get_jobs(self): - return self.module.jobs.filter( - name=self.name - ) - class ScriptModuleManager(models.Manager.from_queryset(RestrictedQuerySet)): diff --git a/netbox/extras/views.py b/netbox/extras/views.py index c81c03a5e..70a662c06 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -1209,7 +1209,7 @@ class ScriptListView(ContentTypePermissionRequiredMixin, View): return 'extras.view_script' def get(self, request): - script_modules = ScriptModule.objects.restrict(request.user) + script_modules = ScriptModule.objects.restrict(request.user).prefetch_related('jobs') return render(request, 'extras/script_list.html', { 'model': ScriptModule, @@ -1229,7 +1229,7 @@ class ScriptView(ContentTypePermissionRequiredMixin, View): def get(self, request, pk): script = Script.objects.get(pk=pk) script_class = script.python_class() - jobs = script.get_jobs() + jobs = script.jobs.all() form = script_class.as_form(initial=normalize_querydict(request.GET)) return render(request, 'extras/script.html', { @@ -1246,7 +1246,7 @@ class ScriptView(ContentTypePermissionRequiredMixin, View): script = Script.objects.get(pk=pk) script_class = script.python_class() - jobs = script.get_jobs() + jobs = script.jobs.all() form = script_class.as_form(request.POST, request.FILES) # Allow execution only if RQ worker process is running @@ -1256,7 +1256,7 @@ class ScriptView(ContentTypePermissionRequiredMixin, View): elif form.is_valid(): job = Job.enqueue( run_script, - instance=script.module, + instance=script, name=script_class.class_name, user=request.user, schedule_at=form.cleaned_data.pop('_schedule_at'), @@ -1286,7 +1286,7 @@ class ScriptSourceView(ContentTypePermissionRequiredMixin, View): def get(self, request, pk): script = Script.objects.get(pk=pk) script_class = script.python_class() - jobs = script.get_jobs() + jobs = script.jobs.all() return render(request, 'extras/script/source.html', { 'job_count': jobs.count(), @@ -1305,7 +1305,7 @@ class ScriptJobsView(ContentTypePermissionRequiredMixin, View): def get(self, request, pk): script = Script.objects.get(pk=pk) script_class = script.python_class() - jobs = script.get_jobs() + jobs = script.jobs.all() jobs_table = JobTable( data=jobs, diff --git a/netbox/templates/extras/script_list.html b/netbox/templates/extras/script_list.html index 7abf81451..74f7be833 100644 --- a/netbox/templates/extras/script_list.html +++ b/netbox/templates/extras/script_list.html @@ -52,31 +52,29 @@ - {% with jobs=module.get_latest_jobs %} - {% for script in module.scripts.all %} - - - {{ script.python_class.name }} - - - {{ script.python_class.Meta.description|markdown|placeholder }} - - {% with last_result=jobs|get_key:script.python_class.class_name %} - {% if last_result %} - - {{ last_result.created|annotated_date }} - - - {% badge last_result.get_status_display last_result.get_status_color %} - - {% else %} - {% trans "Never" %} - {{ ''|placeholder }} - {% endif %} - {% endwith %} + {% for script in module.scripts.all %} + + + {{ script.python_class.name }} + + + {{ script.python_class.Meta.description|markdown|placeholder }} + + {% with last_result=script.get_latest_jobs|get_key:script.name %} + {% if last_result %} + + {{ last_result.created|annotated_date }} + + + {% badge last_result.get_status_display last_result.get_status_color %} + + {% else %} + {% trans "Never" %} + {{ ''|placeholder }} + {% endif %} - {% endfor %} - {% endwith %} + {% endwith %} + {% endfor %} {% endif %}