Browse Source

Closes #1821: Added 'description' field to Site model

Jeremy Stretch 7 years ago
parent
commit
7378d82bc4

+ 6 - 6
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',
         ]
 
 

+ 1 - 0
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) |

+ 7 - 5
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():

+ 6 - 1
netbox/dcim/migrations/0054_site_status_timezone.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
@@ -15,6 +15,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',
             field=models.PositiveSmallIntegerField(choices=[[1, 'Active'], [2, 'Planned'], [4, 'Retired']], default=1),
         ),

+ 4 - 2
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,

+ 1 - 16
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')
 
 
 #

+ 1 - 1
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'
 
 

+ 10 - 0
netbox/templates/dcim/site.html

@@ -123,6 +123,16 @@
                         {% endif %}
                     </td>
                 </tr>
+                <tr>
+                    <td>Description</td>
+                    <td>
+                        {% if site.description %}
+                            {{ site.description }}
+                        {% else %}
+                            <span class="text-muted">N/A</span>
+                        {% endif %}
+                    </td>
+                </tr>
             </table>
         </div>
         <div class="panel panel-default">