Skip to content

Commit

Permalink
Allow import/export of manufacturers (netbox-community#1347)
Browse files Browse the repository at this point in the history
  • Loading branch information
paravoid committed Jul 17, 2017
1 parent 7beabc5 commit e4ede71
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 1 deletion.
12 changes: 12 additions & 0 deletions netbox/dcim/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,18 @@ class Meta:
fields = ['name', 'slug']


class ManufacturerCSVForm(forms.ModelForm):
class Meta:
model = Manufacturer
fields = [
'name', 'slug'
]
help_texts = {
'name': 'Manufacturer name',
'slug': 'URL-friendly slug',
}


#
# Device types
#
Expand Down
10 changes: 10 additions & 0 deletions netbox/dcim/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,10 @@ class Manufacturer(models.Model):
name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(unique=True)

csv_headers = [
'name', 'slug',
]

class Meta:
ordering = ['name']

Expand All @@ -464,6 +468,12 @@ def __str__(self):
def get_absolute_url(self):
return "{}?manufacturer={}".format(reverse('dcim:devicetype_list'), self.slug)

def to_csv(self):
return csv_format([
self.name,
self.slug,
])


@python_2_unicode_compatible
class DeviceType(models.Model, CustomFieldModel):
Expand Down
1 change: 1 addition & 0 deletions netbox/dcim/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
# Manufacturers
url(r'^manufacturers/$', views.ManufacturerListView.as_view(), name='manufacturer_list'),
url(r'^manufacturers/add/$', views.ManufacturerCreateView.as_view(), name='manufacturer_add'),
url(r'^manufacturers/import/$', views.ManufacturerBulkImportView.as_view(), name='manufacturer_import'),
url(r'^manufacturers/delete/$', views.ManufacturerBulkDeleteView.as_view(), name='manufacturer_bulk_delete'),
url(r'^manufacturers/(?P<slug>[\w-]+)/edit/$', views.ManufacturerEditView.as_view(), name='manufacturer_edit'),

Expand Down
7 changes: 7 additions & 0 deletions netbox/dcim/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,13 @@ class ManufacturerEditView(ManufacturerCreateView):
permission_required = 'dcim.change_manufacturer'


class ManufacturerBulkImportView(PermissionRequiredMixin, BulkImportView):
permission_required = 'dcim.add_manufacturer'
model_form = forms.ManufacturerCSVForm
table = tables.ManufacturerTable
default_return_url = 'dcim:manufacturer_list'


class ManufacturerBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'dcim.delete_manufacturer'
cls = Manufacturer
Expand Down
2 changes: 1 addition & 1 deletion netbox/extras/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@

# Models which support export templates
EXPORTTEMPLATE_MODELS = [
'site', 'region', 'rack', 'rackgroup', 'device', # DCIM
'site', 'region', 'rack', 'rackgroup', 'manufacturer', 'device', # DCIM
'consoleport', 'powerport', 'interfaceconnection', # DCIM
'aggregate', 'prefix', 'ipaddress', 'vlan', # IPAM
'provider', 'circuit', # Circuits
Expand Down
1 change: 1 addition & 0 deletions netbox/templates/_base.html
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@
<li><a href="{% url 'dcim:manufacturer_list' %}"><i class="fa fa-search" aria-hidden="true"></i> Manufacturers</a></li>
{% if perms.dcim.add_manufacturer %}
<li><a href="{% url 'dcim:manufacturer_add' %}"><i class="fa fa-plus" aria-hidden="true"></i> Add a Manufacturer</a></li>
<li><a href="{% url 'dcim:manufacturer_import' %}"><i class="fa fa-download" aria-hidden="true"></i> Import Manufacturers</a></li>
{% endif %}
{% if perms.dcim.add_manufacturer or perms.dcim.add_platform %}
<li class="divider"></li>
Expand Down
5 changes: 5 additions & 0 deletions netbox/templates/dcim/manufacturer_list.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@
<span class="fa fa-plus" aria-hidden="true"></span>
Add a manufacturer
</a>
<a href="{% url 'dcim:manufacturer_import' %}" class="btn btn-info">
<span class="fa fa-download" aria-hidden="true"></span>
Import manufacturers
</a>
{% endif %}
{% include 'inc/export_button.html' with obj_type='manufacturers' %}
</div>
<h1>Manufacturers</h1>
<div class="row">
Expand Down

0 comments on commit e4ede71

Please sign in to comment.