Pārlūkot izejas kodu

Fixes #7654: Fix assignment of members to virtual chassis with initial position of zero

jeremystretch 4 gadi atpakaļ
vecāks
revīzija
3cb8c5db28

+ 1 - 0
docs/release-notes/version-3.0.md

@@ -9,6 +9,7 @@
 
 ### Bug Fixes
 
+* [#7564](https://github.com/netbox-community/netbox/issues/7564) - Fix assignment of members to virtual chassis with initial position of zero
 * [#7701](https://github.com/netbox-community/netbox/issues/7701) - Fix conflation of assigned IP status & role in interface tables
 * [#7741](https://github.com/netbox-community/netbox/issues/7741) - Fix 404 when attaching multiple images in succession
 * [#7752](https://github.com/netbox-community/netbox/issues/7752) - Fix minimum version check under Python v3.10

+ 8 - 2
netbox/dcim/forms/object_create.py

@@ -117,12 +117,18 @@ class VirtualChassisCreateForm(BootstrapMixin, CustomFieldModelForm):
             'name', 'domain', 'region', 'site_group', 'site', 'rack', 'members', 'initial_position', 'tags',
         ]
 
+    def clean(self):
+        if self.cleaned_data['members'] and self.cleaned_data['initial_position'] is None:
+            raise forms.ValidationError({
+                'initial_position': "A position must be specified for the first VC member."
+            })
+
     def save(self, *args, **kwargs):
         instance = super().save(*args, **kwargs)
 
         # Assign VC members
-        if instance.pk:
-            initial_position = self.cleaned_data.get('initial_position') or 1
+        if instance.pk and self.cleaned_data['members']:
+            initial_position = self.cleaned_data.get('initial_position', 1)
             for i, member in enumerate(self.cleaned_data['members'], start=initial_position):
                 member.virtual_chassis = instance
                 member.vc_position = i

+ 1 - 1
netbox/templates/dcim/virtualchassis.html

@@ -61,7 +61,7 @@
                                 <a href="{{ vc_member.get_absolute_url }}">{{ vc_member }}</a>
                             </td>
                             <td>
-                              {% badge vc_member.vc_position %}
+                              {% badge vc_member.vc_position show_empty=True %}
                             </td>
                             <td>
                               {% if object.master == vc_member %}