Selaa lähdekoodia

Fixes form rendering when scheduling_enabled is disabled (#13123)

* fixes form rendering when scheduling_enabled is disabled #13096

* Remove requires_input property from BaseScript; render form consistently

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
Abhimanyu Saharan 2 vuotta sitten
vanhempi
commit
cab7b76220
3 muutettua tiedostoa jossa 11 lisäystä ja 19 poistoa
  1. 0 7
      netbox/extras/forms/scripts.py
  2. 6 1
      netbox/extras/scripts.py
  3. 5 11
      netbox/templates/extras/script.html

+ 0 - 7
netbox/extras/forms/scripts.py

@@ -56,10 +56,3 @@ class ScriptForm(BootstrapMixin, forms.Form):
             self.cleaned_data['_schedule_at'] = local_now()
 
         return self.cleaned_data
-
-    @property
-    def requires_input(self):
-        """
-        A boolean indicating whether the form requires user input (ignore the built-in fields).
-        """
-        return bool(len(self.fields) > 3)

+ 6 - 1
netbox/extras/scripts.py

@@ -366,7 +366,7 @@ class BaseScript:
         if self.fieldsets:
             fieldsets.extend(self.fieldsets)
         else:
-            fields = (name for name, _ in self._get_vars().items())
+            fields = list(name for name, _ in self._get_vars().items())
             fieldsets.append(('Script Data', fields))
 
         # Append the default fieldset if defined in the Meta class
@@ -390,6 +390,11 @@ class BaseScript:
         # Set initial "commit" checkbox state based on the script's Meta parameter
         form.fields['_commit'].initial = self.commit_default
 
+        # Hide fields if scheduling has been disabled
+        if not self.scheduling_enabled:
+            form.fields['_schedule_at'].widget = forms.HiddenInput()
+            form.fields['_interval'].widget = forms.HiddenInput()
+
         return form
 
     # Logging

+ 5 - 11
netbox/templates/extras/script.html

@@ -15,9 +15,9 @@
       <form action="" method="post" enctype="multipart/form-data" class="form form-object-edit">
         {% csrf_token %}
         <div class="field-group my-4">
-          {% if form.requires_input %}
-            {# Render grouped fields according to declared fieldsets #}
-            {% for group, fields in script.get_fieldsets %}
+          {# Render grouped fields according to declared fieldsets #}
+          {% for group, fields in script.get_fieldsets %}
+            {% if fields %}
               <div class="field-group mb-5">
                 <div class="row mb-2">
                   <h5 class="offset-sm-3">{{ group }}</h5>
@@ -28,14 +28,8 @@
                   {% endwith %}
                 {% endfor %}
               </div>
-            {% endfor %}
-          {% else %}
-            <div class="alert alert-info">
-              <i class="mdi mdi-information"></i>
-              This script does not require any input to run.
-            </div>
-            {% render_form form %}
-          {% endif %}
+            {% endif %}
+          {% endfor %}
         </div>
         <div class="float-end">
           <a href="{% url 'extras:script_list' %}" class="btn btn-outline-danger">Cancel</a>