1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Allow import/export of manufacturers (#1347)

This commit is contained in:
Faidon Liambotis
2017-07-18 02:37:28 +03:00
parent beb91559e5
commit f30fa925ea
7 changed files with 37 additions and 1 deletions

View File

@ -423,6 +423,18 @@ class ManufacturerForm(BootstrapMixin, forms.ModelForm):
fields = ['name', 'slug'] 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 # Device types
# #

View File

@ -455,6 +455,10 @@ class Manufacturer(models.Model):
name = models.CharField(max_length=50, unique=True) name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(unique=True) slug = models.SlugField(unique=True)
csv_headers = [
'name', 'slug',
]
class Meta: class Meta:
ordering = ['name'] ordering = ['name']
@ -464,6 +468,12 @@ class Manufacturer(models.Model):
def get_absolute_url(self): def get_absolute_url(self):
return "{}?manufacturer={}".format(reverse('dcim:devicetype_list'), self.slug) return "{}?manufacturer={}".format(reverse('dcim:devicetype_list'), self.slug)
def to_csv(self):
return csv_format([
self.name,
self.slug,
])
@python_2_unicode_compatible @python_2_unicode_compatible
class DeviceType(models.Model, CustomFieldModel): class DeviceType(models.Model, CustomFieldModel):

View File

@ -64,6 +64,7 @@ urlpatterns = [
# Manufacturers # Manufacturers
url(r'^manufacturers/$', views.ManufacturerListView.as_view(), name='manufacturer_list'), url(r'^manufacturers/$', views.ManufacturerListView.as_view(), name='manufacturer_list'),
url(r'^manufacturers/add/$', views.ManufacturerCreateView.as_view(), name='manufacturer_add'), 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/delete/$', views.ManufacturerBulkDeleteView.as_view(), name='manufacturer_bulk_delete'),
url(r'^manufacturers/(?P<slug>[\w-]+)/edit/$', views.ManufacturerEditView.as_view(), name='manufacturer_edit'), url(r'^manufacturers/(?P<slug>[\w-]+)/edit/$', views.ManufacturerEditView.as_view(), name='manufacturer_edit'),

View File

@ -561,6 +561,13 @@ class ManufacturerEditView(ManufacturerCreateView):
permission_required = 'dcim.change_manufacturer' 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): class ManufacturerBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'dcim.delete_manufacturer' permission_required = 'dcim.delete_manufacturer'
cls = Manufacturer cls = Manufacturer

View File

@ -37,7 +37,7 @@ GRAPH_TYPE_CHOICES = (
# Models which support export templates # Models which support export templates
EXPORTTEMPLATE_MODELS = [ EXPORTTEMPLATE_MODELS = [
'site', 'region', 'rack', 'rackgroup', 'device', # DCIM 'site', 'region', 'rack', 'rackgroup', 'manufacturer', '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

View File

@ -105,6 +105,7 @@
<li><a href="{% url 'dcim:manufacturer_list' %}"><i class="fa fa-search" aria-hidden="true"></i> Manufacturers</a></li> <li><a href="{% url 'dcim:manufacturer_list' %}"><i class="fa fa-search" aria-hidden="true"></i> Manufacturers</a></li>
{% if perms.dcim.add_manufacturer %} {% 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_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 %} {% endif %}
{% if perms.dcim.add_manufacturer or perms.dcim.add_platform %} {% if perms.dcim.add_manufacturer or perms.dcim.add_platform %}
<li class="divider"></li> <li class="divider"></li>

View File

@ -10,7 +10,12 @@
<span class="fa fa-plus" aria-hidden="true"></span> <span class="fa fa-plus" aria-hidden="true"></span>
Add a manufacturer Add a manufacturer
</a> </a>
<a href="{% url 'dcim:manufacturer_import' %}" class="btn btn-info">
<span class="fa fa-download" aria-hidden="true"></span>
Import manufacturers
</a>
{% endif %} {% endif %}
{% include 'inc/export_button.html' with obj_type='manufacturers' %}
</div> </div>
<h1>Manufacturers</h1> <h1>Manufacturers</h1>
<div class="row"> <div class="row">