mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-17 04:32:51 -06:00
Allow import/export of rack groups (#1347)
This commit is contained in:
parent
fbc5e74318
commit
beb91559e5
@ -190,6 +190,27 @@ class RackGroupForm(BootstrapMixin, forms.ModelForm):
|
|||||||
fields = ['site', 'name', 'slug']
|
fields = ['site', 'name', 'slug']
|
||||||
|
|
||||||
|
|
||||||
|
class RackGroupCSVForm(forms.ModelForm):
|
||||||
|
site = forms.ModelChoiceField(
|
||||||
|
queryset=Site.objects.all(),
|
||||||
|
to_field_name='name',
|
||||||
|
help_text='Name of parent site',
|
||||||
|
error_messages={
|
||||||
|
'invalid_choice': 'Site not found.',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = RackGroup
|
||||||
|
fields = [
|
||||||
|
'site', 'name', 'slug',
|
||||||
|
]
|
||||||
|
help_texts = {
|
||||||
|
'name': 'Name of rack group',
|
||||||
|
'slug': 'URL-friendly slug',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class RackGroupFilterForm(BootstrapMixin, forms.Form):
|
class RackGroupFilterForm(BootstrapMixin, forms.Form):
|
||||||
site = FilterChoiceField(queryset=Site.objects.annotate(filter_count=Count('rack_groups')), to_field_name='slug')
|
site = FilterChoiceField(queryset=Site.objects.annotate(filter_count=Count('rack_groups')), to_field_name='slug')
|
||||||
|
|
||||||
|
@ -159,6 +159,10 @@ class RackGroup(models.Model):
|
|||||||
slug = models.SlugField()
|
slug = models.SlugField()
|
||||||
site = models.ForeignKey('Site', related_name='rack_groups', on_delete=models.CASCADE)
|
site = models.ForeignKey('Site', related_name='rack_groups', on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
csv_headers = [
|
||||||
|
'site', 'name', 'slug',
|
||||||
|
]
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['site', 'name']
|
ordering = ['site', 'name']
|
||||||
unique_together = [
|
unique_together = [
|
||||||
@ -172,6 +176,13 @@ class RackGroup(models.Model):
|
|||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return "{}?group_id={}".format(reverse('dcim:rack_list'), self.pk)
|
return "{}?group_id={}".format(reverse('dcim:rack_list'), self.pk)
|
||||||
|
|
||||||
|
def to_csv(self):
|
||||||
|
return csv_format([
|
||||||
|
self.site,
|
||||||
|
self.name,
|
||||||
|
self.slug,
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
class RackRole(models.Model):
|
class RackRole(models.Model):
|
||||||
|
@ -32,6 +32,7 @@ urlpatterns = [
|
|||||||
# Rack groups
|
# Rack groups
|
||||||
url(r'^rack-groups/$', views.RackGroupListView.as_view(), name='rackgroup_list'),
|
url(r'^rack-groups/$', views.RackGroupListView.as_view(), name='rackgroup_list'),
|
||||||
url(r'^rack-groups/add/$', views.RackGroupCreateView.as_view(), name='rackgroup_add'),
|
url(r'^rack-groups/add/$', views.RackGroupCreateView.as_view(), name='rackgroup_add'),
|
||||||
|
url(r'^rack-groups/import/$', views.RackGroupBulkImportView.as_view(), name='rackgroup_import'),
|
||||||
url(r'^rack-groups/delete/$', views.RackGroupBulkDeleteView.as_view(), name='rackgroup_bulk_delete'),
|
url(r'^rack-groups/delete/$', views.RackGroupBulkDeleteView.as_view(), name='rackgroup_bulk_delete'),
|
||||||
url(r'^rack-groups/(?P<pk>\d+)/edit/$', views.RackGroupEditView.as_view(), name='rackgroup_edit'),
|
url(r'^rack-groups/(?P<pk>\d+)/edit/$', views.RackGroupEditView.as_view(), name='rackgroup_edit'),
|
||||||
|
|
||||||
|
@ -314,6 +314,13 @@ class RackGroupEditView(RackGroupCreateView):
|
|||||||
permission_required = 'dcim.change_rackgroup'
|
permission_required = 'dcim.change_rackgroup'
|
||||||
|
|
||||||
|
|
||||||
|
class RackGroupBulkImportView(PermissionRequiredMixin, BulkImportView):
|
||||||
|
permission_required = 'dcim.add_rackgroup'
|
||||||
|
model_form = forms.RackGroupCSVForm
|
||||||
|
table = tables.RackGroupTable
|
||||||
|
default_return_url = 'dcim:rackgroup_list'
|
||||||
|
|
||||||
|
|
||||||
class RackGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
class RackGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
||||||
permission_required = 'dcim.delete_rackgroup'
|
permission_required = 'dcim.delete_rackgroup'
|
||||||
cls = RackGroup
|
cls = RackGroup
|
||||||
|
@ -37,7 +37,7 @@ GRAPH_TYPE_CHOICES = (
|
|||||||
|
|
||||||
# Models which support export templates
|
# Models which support export templates
|
||||||
EXPORTTEMPLATE_MODELS = [
|
EXPORTTEMPLATE_MODELS = [
|
||||||
'site', 'region', 'rack', 'device', # DCIM
|
'site', 'region', 'rack', 'rackgroup', 'device', # DCIM
|
||||||
'consoleport', 'powerport', 'interfaceconnection', # DCIM
|
'consoleport', 'powerport', 'interfaceconnection', # DCIM
|
||||||
'aggregate', 'prefix', 'ipaddress', 'vlan', # IPAM
|
'aggregate', 'prefix', 'ipaddress', 'vlan', # IPAM
|
||||||
'provider', 'circuit', # Circuits
|
'provider', 'circuit', # Circuits
|
||||||
|
@ -68,6 +68,7 @@
|
|||||||
<li><a href="{% url 'dcim:rackgroup_list' %}"><i class="fa fa-search" aria-hidden="true"></i> Rack Groups</a></li>
|
<li><a href="{% url 'dcim:rackgroup_list' %}"><i class="fa fa-search" aria-hidden="true"></i> Rack Groups</a></li>
|
||||||
{% if perms.dcim.add_rackgroup %}
|
{% if perms.dcim.add_rackgroup %}
|
||||||
<li><a href="{% url 'dcim:rackgroup_add' %}"><i class="fa fa-plus" aria-hidden="true"></i> Add a Rack Group</a></li>
|
<li><a href="{% url 'dcim:rackgroup_add' %}"><i class="fa fa-plus" aria-hidden="true"></i> Add a Rack Group</a></li>
|
||||||
|
<li><a href="{% url 'dcim:rackgroup_import' %}"><i class="fa fa-download" aria-hidden="true"></i> Import Rack Groups</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li class="divider"></li>
|
<li class="divider"></li>
|
||||||
<li><a href="{% url 'dcim:rackrole_list' %}"><i class="fa fa-search" aria-hidden="true"></i> Rack Roles</a></li>
|
<li><a href="{% url 'dcim:rackrole_list' %}"><i class="fa fa-search" aria-hidden="true"></i> Rack Roles</a></li>
|
||||||
|
@ -10,7 +10,12 @@
|
|||||||
<span class="fa fa-plus" aria-hidden="true"></span>
|
<span class="fa fa-plus" aria-hidden="true"></span>
|
||||||
Add a rack group
|
Add a rack group
|
||||||
</a>
|
</a>
|
||||||
|
<a href="{% url 'dcim:rackgroup_import' %}" class="btn btn-info">
|
||||||
|
<span class="fa fa-download" aria-hidden="true"></span>
|
||||||
|
Import rack groups
|
||||||
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% include 'inc/export_button.html' with obj_type='rackgroups' %}
|
||||||
</div>
|
</div>
|
||||||
<h1>Rack Groups</h1>
|
<h1>Rack Groups</h1>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
Loading…
Reference in New Issue
Block a user