mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-22 20:12:00 -06:00
Added a form to edit virtual chassis
This commit is contained in:
parent
2545912532
commit
a85b3aa69f
@ -2177,11 +2177,31 @@ class InventoryItemForm(BootstrapMixin, forms.ModelForm):
|
||||
#
|
||||
|
||||
class VirtualChassisForm(BootstrapMixin, forms.ModelForm):
|
||||
master = forms.ModelChoiceField(queryset=Device.objects.all())
|
||||
|
||||
class Meta:
|
||||
model = VirtualChassis
|
||||
fields = ['domain']
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(VirtualChassisForm, self).__init__(*args, **kwargs)
|
||||
|
||||
if self.instance:
|
||||
vc_memberships = self.instance.memberships.all()
|
||||
self.fields['master'].queryset = Device.objects.filter(pk__in=[vcm.device_id for vcm in vc_memberships])
|
||||
self.initial['master'] = self.instance.master
|
||||
|
||||
def save(self, commit=True):
|
||||
instance = super(VirtualChassisForm, self).save(commit=commit)
|
||||
|
||||
# Update the master membership if it has been changed
|
||||
master = self.cleaned_data['master']
|
||||
if instance.pk and instance.master != master:
|
||||
VCMembership.objects.filter(virtual_chassis=self.instance).update(is_master=False)
|
||||
VCMembership.objects.filter(virtual_chassis=self.instance, device=master).update(is_master=True)
|
||||
|
||||
return instance
|
||||
|
||||
|
||||
class DeviceSelectionForm(forms.Form):
|
||||
pk = forms.ModelMultipleChoiceField(queryset=Device.objects.all(), widget=forms.MultipleHiddenInput)
|
||||
|
@ -1503,9 +1503,17 @@ class VirtualChassis(models.Model):
|
||||
blank=True
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.master.name
|
||||
|
||||
def get_absolute_url(self):
|
||||
return "{}?virtual_chassis={}".format(reverse('dcim:device_list'), self.pk)
|
||||
|
||||
@property
|
||||
def master(self):
|
||||
master_vcm = VCMembership.objects.filter(virtual_chassis=self, is_master=True).first()
|
||||
return master_vcm.device if master_vcm else None
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class VCMembership(models.Model):
|
||||
|
@ -1895,9 +1895,7 @@ class VirtualChassisEditView(PermissionRequiredMixin, ObjectEditView):
|
||||
permission_required = 'dcim.change_virtualchassis'
|
||||
model = VirtualChassis
|
||||
model_form = forms.VirtualChassisForm
|
||||
|
||||
def get_return_url(self, request, obj):
|
||||
return reverse('dcim:virtualchassis_list')
|
||||
template_name = 'dcim/virtualchassis_edit.html'
|
||||
|
||||
|
||||
class VirtualChassisDeleteView(PermissionRequiredMixin, ObjectDeleteView):
|
||||
|
@ -116,19 +116,23 @@
|
||||
<a href="{{ vcm.device.get_absolute_url }}">{{ vcm.device }}</a>
|
||||
</td>
|
||||
<td>{{ vcm.position }}</td>
|
||||
<td>{{ vcm.is_master }}</td>
|
||||
<td>{% if vcm.is_master %}<i class="fa fa-check"></i>{% endif %}</td>
|
||||
<td>{{ vcm.priority|default:"" }}</td>
|
||||
<td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% if perms.dcim.delete_virtualchassis %}
|
||||
<div class="panel-footer text-right">
|
||||
<a href="{% url 'dcim:virtualchassis_delete' pk=device.virtual_chassis.pk %}" class="btn btn-danger btn-xs">
|
||||
<div class="panel-footer text-right">
|
||||
{% if perms.dcim.change_virtualchassis %}
|
||||
<a href="{% url 'dcim:virtualchassis_edit' pk=device.virtual_chassis.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-warning btn-xs">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit Virtual Chassis
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if perms.dcim.delete_virtualchassis %}
|
||||
<a href="{% url 'dcim:virtualchassis_delete' pk=device.virtual_chassis.pk %}?return_url={{ device.get_absolute_url }}" class="btn btn-danger btn-xs">
|
||||
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Delete Virtual Chassis
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="panel panel-default">
|
||||
|
11
netbox/templates/dcim/virtualchassis_edit.html
Normal file
11
netbox/templates/dcim/virtualchassis_edit.html
Normal file
@ -0,0 +1,11 @@
|
||||
{% extends 'utilities/obj_edit.html' %}
|
||||
{% load form_helpers %}
|
||||
|
||||
{% block form %}
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading"><strong>{{ obj_type|capfirst }}</strong></div>
|
||||
<div class="panel-body">
|
||||
{% render_form form %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
Loading…
Reference in New Issue
Block a user