diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index 1debcf1dd..b31cab8dc 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -64,9 +64,9 @@ class SiteSerializer(CustomFieldModelSerializer): class Meta: model = Site fields = [ - 'id', 'name', 'slug', 'status', 'region', 'tenant', 'facility', 'asn', 'time_zone', 'physical_address', - 'shipping_address', 'contact_name', 'contact_phone', 'contact_email', 'comments', 'custom_fields', - 'created', 'last_updated', 'count_prefixes', 'count_vlans', 'count_racks', 'count_devices', + 'id', 'name', 'slug', 'status', 'region', 'tenant', 'facility', 'asn', 'time_zone', 'description', + 'physical_address', 'shipping_address', 'contact_name', 'contact_phone', 'contact_email', 'comments', + 'custom_fields', 'created', 'last_updated', 'count_prefixes', 'count_vlans', 'count_racks', 'count_devices', 'count_circuits', ] @@ -85,9 +85,9 @@ class WritableSiteSerializer(CustomFieldModelSerializer): class Meta: model = Site fields = [ - 'id', 'name', 'slug', 'status', 'region', 'tenant', 'facility', 'asn', 'time_zone', 'physical_address', - 'shipping_address', 'contact_name', 'contact_phone', 'contact_email', 'comments', 'custom_fields', - 'created', 'last_updated', + 'id', 'name', 'slug', 'status', 'region', 'tenant', 'facility', 'asn', 'time_zone', 'description', + 'physical_address', 'shipping_address', 'contact_name', 'contact_phone', 'contact_email', 'comments', + 'custom_fields', 'created', 'last_updated', ] diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 7bf377363..d5dbbe641 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -75,6 +75,7 @@ class SiteFilter(CustomFieldFilterSet, django_filters.FilterSet): qs_filter = ( Q(name__icontains=value) | Q(facility__icontains=value) | + Q(description__icontains=value) | Q(physical_address__icontains=value) | Q(shipping_address__icontains=value) | Q(contact_name__icontains=value) | diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 8f4e324a4..d13e45766 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -104,8 +104,9 @@ class SiteForm(BootstrapMixin, TenancyForm, CustomFieldForm): class Meta: model = Site fields = [ - 'name', 'slug', 'status', 'region', 'tenant_group', 'tenant', 'facility', 'asn', 'physical_address', - 'shipping_address', 'contact_name', 'contact_phone', 'contact_email', 'time_zone', 'comments', + 'name', 'slug', 'status', 'region', 'tenant_group', 'tenant', 'facility', 'asn', 'description', + 'physical_address', 'shipping_address', 'contact_name', 'contact_phone', 'contact_email', 'time_zone', + 'comments', ] widgets = { 'physical_address': SmallTextarea(attrs={'rows': 3}), @@ -148,8 +149,8 @@ class SiteCSVForm(forms.ModelForm): class Meta: model = Site fields = [ - 'name', 'slug', 'status', 'region', 'tenant', 'facility', 'asn', 'physical_address', 'shipping_address', - 'contact_name', 'contact_phone', 'contact_email', 'time_zone', 'comments', + 'name', 'slug', 'status', 'region', 'tenant', 'facility', 'asn', 'description', 'physical_address', + 'shipping_address', 'contact_name', 'contact_phone', 'contact_email', 'time_zone', 'comments', ] help_texts = { 'name': 'Site name', @@ -164,10 +165,11 @@ class SiteBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm): region = TreeNodeChoiceField(queryset=Region.objects.all(), required=False) tenant = forms.ModelChoiceField(queryset=Tenant.objects.all(), required=False) asn = forms.IntegerField(min_value=1, max_value=4294967295, required=False, label='ASN') + description = forms.CharField(max_length=100, required=False) time_zone = TimeZoneFormField(required=False) class Meta: - nullable_fields = ['region', 'tenant', 'asn', 'time_zone'] + nullable_fields = ['region', 'tenant', 'asn', 'description', 'time_zone'] def site_status_choices(): diff --git a/netbox/dcim/migrations/0054_site_status_timezone.py b/netbox/dcim/migrations/0054_site_status_timezone_description.py similarity index 75% rename from netbox/dcim/migrations/0054_site_status_timezone.py rename to netbox/dcim/migrations/0054_site_status_timezone_description.py index 56fbfcebc..723f61fc8 100644 --- a/netbox/dcim/migrations/0054_site_status_timezone.py +++ b/netbox/dcim/migrations/0054_site_status_timezone_description.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.6 on 2018-01-25 17:57 +# Generated by Django 1.11.6 on 2018-01-25 18:21 from __future__ import unicode_literals from django.db import migrations, models @@ -13,6 +13,11 @@ class Migration(migrations.Migration): ] operations = [ + migrations.AddField( + model_name='site', + name='description', + field=models.CharField(blank=True, max_length=100), + ), migrations.AddField( model_name='site', name='status', diff --git a/netbox/dcim/models.py b/netbox/dcim/models.py index 099291e95..20691ff94 100644 --- a/netbox/dcim/models.py +++ b/netbox/dcim/models.py @@ -89,6 +89,7 @@ class Site(CreatedUpdatedModel, CustomFieldModel): facility = models.CharField(max_length=50, blank=True) asn = ASNField(blank=True, null=True, verbose_name='ASN') time_zone = TimeZoneField(blank=True) + description = models.CharField(max_length=100, blank=True) physical_address = models.CharField(max_length=200, blank=True) shipping_address = models.CharField(max_length=200, blank=True) contact_name = models.CharField(max_length=50, blank=True) @@ -101,8 +102,8 @@ class Site(CreatedUpdatedModel, CustomFieldModel): objects = SiteManager() csv_headers = [ - 'name', 'slug', 'status', 'region', 'tenant', 'facility', 'asn', 'time_zone', 'contact_name', 'contact_phone', - 'contact_email', + 'name', 'slug', 'status', 'region', 'tenant', 'facility', 'asn', 'time_zone', 'description', 'contact_name', + 'contact_phone', 'contact_email', ] class Meta: @@ -124,6 +125,7 @@ class Site(CreatedUpdatedModel, CustomFieldModel): self.facility, self.asn, self.time_zone, + self.description, self.contact_name, self.contact_phone, self.contact_email, diff --git a/netbox/dcim/tables.py b/netbox/dcim/tables.py index 870a64bac..1bedebf0a 100644 --- a/netbox/dcim/tables.py +++ b/netbox/dcim/tables.py @@ -151,22 +151,7 @@ class SiteTable(BaseTable): class Meta(BaseTable.Meta): model = Site - fields = ('pk', 'name', 'status', 'facility', 'region', 'tenant', 'asn') - - -class SiteDetailTable(SiteTable): - rack_count = tables.Column(accessor=Accessor('count_racks'), orderable=False, verbose_name='Racks') - device_count = tables.Column(accessor=Accessor('count_devices'), orderable=False, verbose_name='Devices') - prefix_count = tables.Column(accessor=Accessor('count_prefixes'), orderable=False, verbose_name='Prefixes') - vlan_count = tables.Column(accessor=Accessor('count_vlans'), orderable=False, verbose_name='VLANs') - circuit_count = tables.Column(accessor=Accessor('count_circuits'), orderable=False, verbose_name='Circuits') - vm_count = tables.Column(accessor=Accessor('count_vms'), orderable=False, verbose_name='VMs') - - class Meta(SiteTable.Meta): - fields = ( - 'pk', 'name', 'status', 'facility', 'region', 'tenant', 'asn', 'rack_count', 'device_count', 'prefix_count', - 'vlan_count', 'circuit_count', 'vm_count', - ) + fields = ('pk', 'name', 'status', 'facility', 'region', 'tenant', 'asn', 'description') # diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index d0e4c90a4..a7dc8fca9 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -165,7 +165,7 @@ class SiteListView(ObjectListView): queryset = Site.objects.select_related('region', 'tenant') filter = filters.SiteFilter filter_form = forms.SiteFilterForm - table = tables.SiteDetailTable + table = tables.SiteTable template_name = 'dcim/site_list.html' diff --git a/netbox/templates/dcim/site.html b/netbox/templates/dcim/site.html index ad7f0276d..b14c2019d 100644 --- a/netbox/templates/dcim/site.html +++ b/netbox/templates/dcim/site.html @@ -123,6 +123,16 @@ {% endif %} + + Description + + {% if site.description %} + {{ site.description }} + {% else %} + N/A + {% endif %} + +