diff --git a/netbox/netbox/views/generic/bulk_views.py b/netbox/netbox/views/generic/bulk_views.py index d609f0a18..be574204c 100644 --- a/netbox/netbox/views/generic/bulk_views.py +++ b/netbox/netbox/views/generic/bulk_views.py @@ -314,11 +314,20 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView): return data def _get_form_fields(self): - # Exclude any fields which use a HiddenInput widget - return { - name: field for name, field in self.model_form().fields.items() - if type(field.widget) is not HiddenInput - } + form = self.model_form() + required_fields = {} + optional_fields = {} + + # Return only visible fields, with required fields listed first + for field in form.visible_fields(): + if field.is_hidden: + continue + elif field.field.required: + required_fields[field.name] = field.field + else: + optional_fields[field.name] = field.field + + return {**required_fields, **optional_fields} def _save_object(self, import_form, model_form, request): diff --git a/netbox/templates/generic/bulk_import.html b/netbox/templates/generic/bulk_import.html index 484b7a36e..d4e61e675 100644 --- a/netbox/templates/generic/bulk_import.html +++ b/netbox/templates/generic/bulk_import.html @@ -103,87 +103,87 @@ Context: {% if fields %}
-
-
-
{% trans "Field Options" %}
- - - - - - - - {% for name, field in fields.items %} - - - - - - - {% endfor %} -
{% trans "Field" %}{% trans "Required" %}{% trans "Accessor" %}{% trans "Description" %}
- {% if field.required %}{% endif %}{{ name }}{% if field.required %}{% endif %} - - {% if field.required %} - {% checkmark True true="Required" %} - {% else %} - {{ ''|placeholder }} - {% endif %} - - {% if field.to_field_name %} - {{ field.to_field_name }} - {% else %} - {{ ''|placeholder }} - {% endif %} - - {% if field.STATIC_CHOICES %} - - - {% endif %} - {% if field.help_text %} - {{ field.help_text }}
- {% elif field.label %} - {{ field.label }}
- {% endif %} - {% if field|widget_type == 'dateinput' %} - {% trans "Format: YYYY-MM-DD" %} - {% elif field|widget_type == 'checkboxinput' %} - {% trans "Specify true or false" %} - {% endif %} -
-
+
+
+
{% trans "Field Options" %}
+ + + + + + + + + + + {% for name, field in fields.items %} + + + + {% if field.to_field_name %} + + {% else %} + + {% endif %} + + + {% endfor %} + +
{% trans "Field" %}{% trans "Required" %}{% trans "Accessor" %}{% trans "Description" %}
+ {{ name }} + + {% if field.required %} + {% checkmark True true="Required" %} + {% else %} + {{ ''|placeholder }} + {% endif %} + {{ field.to_field_name }}{{ ''|placeholder }} + {% if field.help_text %} + {{ field.help_text }} + {% elif field.label %} + {{ field.label }} + {% endif %} + {% if field.STATIC_CHOICES %} + + + {% endif %} + {% if field|widget_type == 'dateinput' %} +
{% trans "Format: YYYY-MM-DD" %} + {% elif field|widget_type == 'checkboxinput' %} +
{% trans "Specify true or false" %} + {% endif %} +
+