Add custom fields to VLANGroup

This commit is contained in:
Arnoud Vermeer 2018-01-10 11:05:11 +01:00
parent b4a842d9da
commit 747a393386
6 changed files with 18 additions and 15 deletions

View File

@ -3,11 +3,12 @@ from __future__ import unicode_literals
# Models which support custom fields
CUSTOMFIELD_MODELS = (
'provider', 'circuit', # Circuits
'site', 'rack', 'devicetype', 'device', # DCIM
'aggregate', 'prefix', 'ipaddress', 'vlan', 'vrf', # IPAM
'tenant', # Tenancy
'cluster', 'virtualmachine', # Virtualization
'provider', 'circuit', # Circuits
'site', 'rack', 'devicetype', 'device', # DCIM
'aggregate', 'prefix', 'ipaddress', 'vlan', # IPAM
'vlangroup', 'vrf', # IPAM
'tenant', # Tenancy
'cluster', 'virtualmachine', # Virtualization
)
# Custom field types
@ -41,7 +42,7 @@ EXPORTTEMPLATE_MODELS = [
'provider', 'circuit', # Circuits
'site', 'region', 'rack', 'rackgroup', 'manufacturer', 'devicetype', 'device', # DCIM
'consoleport', 'powerport', 'interfaceconnection', # DCIM
'aggregate', 'prefix', 'ipaddress', 'vlan', # IPAM
'aggregate', 'prefix', 'ipaddress', 'vlan', 'vlangroup', # IPAM
'tenant', # Tenancy
'cluster', 'virtualmachine', # Virtualization
]

View File

@ -112,12 +112,12 @@ class WritableAggregateSerializer(CustomFieldModelSerializer):
# VLAN groups
#
class VLANGroupSerializer(serializers.ModelSerializer):
class VLANGroupSerializer(CustomFieldModelSerializer):
site = NestedSiteSerializer()
class Meta:
model = VLANGroup
fields = ['id', 'name', 'slug', 'site']
fields = ['id', 'name', 'slug', 'site', 'custom_fields']
class NestedVLANGroupSerializer(serializers.ModelSerializer):
@ -128,11 +128,11 @@ class NestedVLANGroupSerializer(serializers.ModelSerializer):
fields = ['id', 'url', 'name', 'slug']
class WritableVLANGroupSerializer(serializers.ModelSerializer):
class WritableVLANGroupSerializer(CustomFieldModelSerializer):
class Meta:
model = VLANGroup
fields = ['id', 'name', 'slug', 'site']
fields = ['id', 'name', 'slug', 'site', 'custom_fields']
validators = []
def validate(self, data):

View File

@ -161,7 +161,7 @@ class IPAddressViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
# VLAN groups
#
class VLANGroupViewSet(WritableSerializerMixin, ModelViewSet):
class VLANGroupViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
queryset = VLANGroup.objects.select_related('site')
serializer_class = serializers.VLANGroupSerializer
write_serializer_class = serializers.WritableVLANGroupSerializer

View File

@ -325,7 +325,7 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet):
return queryset.filter(address__net_mask_length=value)
class VLANGroupFilter(django_filters.FilterSet):
class VLANGroupFilter(CustomFieldFilterSet, django_filters.FilterSet):
site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.all(),
label='Site (ID)',

View File

@ -734,7 +734,7 @@ class IPAddressFilterForm(BootstrapMixin, CustomFieldFilterForm):
# VLAN groups
#
class VLANGroupForm(BootstrapMixin, forms.ModelForm):
class VLANGroupForm(BootstrapMixin, CustomFieldForm):
slug = SlugField()
class Meta:
@ -762,7 +762,8 @@ class VLANGroupCSVForm(forms.ModelForm):
}
class VLANGroupFilterForm(BootstrapMixin, forms.Form):
class VLANGroupFilterForm(BootstrapMixin, CustomFieldFilterForm):
model = VLANGroup
site = FilterChoiceField(
queryset=Site.objects.annotate(filter_count=Count('vlan_groups')),
to_field_name='slug',

View File

@ -486,13 +486,14 @@ class IPAddress(CreatedUpdatedModel, CustomFieldModel):
@python_2_unicode_compatible
class VLANGroup(models.Model):
class VLANGroup(models.Model, CustomFieldModel):
"""
A VLAN group is an arbitrary collection of VLANs within which VLAN IDs and names must be unique.
"""
name = models.CharField(max_length=50)
slug = models.SlugField()
site = models.ForeignKey('dcim.Site', related_name='vlan_groups', on_delete=models.PROTECT, blank=True, null=True)
custom_field_values = GenericRelation(CustomFieldValue, content_type_field='obj_type', object_id_field='obj_id')
class Meta:
ordering = ['site', 'name']