mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-08 00:28:16 -06:00
Add custom fields to VLANGroup
This commit is contained in:
parent
b4a842d9da
commit
747a393386
@ -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
|
||||||
]
|
]
|
||||||
|
@ -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):
|
||||||
|
@ -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
|
||||||
|
@ -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)',
|
||||||
|
@ -734,7 +734,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:
|
||||||
@ -762,7 +762,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',
|
||||||
|
@ -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']
|
||||||
|
Loading…
Reference in New Issue
Block a user