This commit is contained in:
Arnoud Vermeer 2018-01-10 10:22:21 +00:00 committed by GitHub
commit dcab146194
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 # Models which support custom fields
CUSTOMFIELD_MODELS = ( CUSTOMFIELD_MODELS = (
'provider', 'circuit', # Circuits 'provider', 'circuit', # Circuits
'site', 'rack', 'devicetype', 'device', # DCIM 'site', 'rack', 'devicetype', 'device', # DCIM
'aggregate', 'prefix', 'ipaddress', 'vlan', 'vrf', # IPAM 'aggregate', 'prefix', 'ipaddress', 'vlan', # IPAM
'tenant', # Tenancy 'vlangroup', 'vrf', # IPAM
'cluster', 'virtualmachine', # Virtualization 'tenant', # Tenancy
'cluster', 'virtualmachine', # Virtualization
) )
# Custom field types # Custom field types
@ -41,7 +42,7 @@ EXPORTTEMPLATE_MODELS = [
'provider', 'circuit', # Circuits 'provider', 'circuit', # Circuits
'site', 'region', 'rack', 'rackgroup', 'manufacturer', 'devicetype', 'device', # DCIM 'site', 'region', 'rack', 'rackgroup', 'manufacturer', 'devicetype', 'device', # DCIM
'consoleport', 'powerport', 'interfaceconnection', # DCIM 'consoleport', 'powerport', 'interfaceconnection', # DCIM
'aggregate', 'prefix', 'ipaddress', 'vlan', # IPAM 'aggregate', 'prefix', 'ipaddress', 'vlan', 'vlangroup', # IPAM
'tenant', # Tenancy 'tenant', # Tenancy
'cluster', 'virtualmachine', # Virtualization 'cluster', 'virtualmachine', # Virtualization
] ]

View File

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

View File

@ -161,7 +161,7 @@ class IPAddressViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
# VLAN groups # VLAN groups
# #
class VLANGroupViewSet(WritableSerializerMixin, ModelViewSet): class VLANGroupViewSet(WritableSerializerMixin, CustomFieldModelViewSet):
queryset = VLANGroup.objects.select_related('site') queryset = VLANGroup.objects.select_related('site')
serializer_class = serializers.VLANGroupSerializer serializer_class = serializers.VLANGroupSerializer
write_serializer_class = serializers.WritableVLANGroupSerializer 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) return queryset.filter(address__net_mask_length=value)
class VLANGroupFilter(django_filters.FilterSet): class VLANGroupFilter(CustomFieldFilterSet, django_filters.FilterSet):
site_id = django_filters.ModelMultipleChoiceFilter( site_id = django_filters.ModelMultipleChoiceFilter(
queryset=Site.objects.all(), queryset=Site.objects.all(),
label='Site (ID)', label='Site (ID)',

View File

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

View File

@ -486,13 +486,14 @@ class IPAddress(CreatedUpdatedModel, CustomFieldModel):
@python_2_unicode_compatible @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. A VLAN group is an arbitrary collection of VLANs within which VLAN IDs and names must be unique.
""" """
name = models.CharField(max_length=50) name = models.CharField(max_length=50)
slug = models.SlugField() slug = models.SlugField()
site = models.ForeignKey('dcim.Site', related_name='vlan_groups', on_delete=models.PROTECT, blank=True, null=True) 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: class Meta:
ordering = ['site', 'name'] ordering = ['site', 'name']