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:
@ -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
|
||||||
#
|
#
|
||||||
|
@ -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):
|
||||||
|
@ -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'),
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
@ -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">
|
||||||
|
Reference in New Issue
Block a user