Add Custom Field support to dcim Regions

This commit is contained in:
Marco Ceppi 2019-11-21 06:54:12 -05:00
parent 8aab425b45
commit b037e9de35
6 changed files with 14 additions and 7 deletions

View File

@ -57,13 +57,13 @@ class ConnectedEndpointSerializer(ValidatedModelSerializer):
# Regions/sites # Regions/sites
# #
class RegionSerializer(serializers.ModelSerializer): class RegionSerializer(CustomFieldModelSerializer):
parent = NestedRegionSerializer(required=False, allow_null=True) parent = NestedRegionSerializer(required=False, allow_null=True)
site_count = serializers.IntegerField(read_only=True) site_count = serializers.IntegerField(read_only=True)
class Meta: class Meta:
model = Region model = Region
fields = ['id', 'name', 'slug', 'parent', 'site_count'] fields = ['id', 'name', 'slug', 'parent', 'site_count', 'custom_fields']
class SiteSerializer(TaggitSerializer, CustomFieldModelSerializer): class SiteSerializer(TaggitSerializer, CustomFieldModelSerializer):

View File

@ -97,7 +97,7 @@ class CableTraceMixin(object):
# Regions # Regions
# #
class RegionViewSet(ModelViewSet): class RegionViewSet(CustomFieldModelViewSet):
queryset = Region.objects.annotate( queryset = Region.objects.annotate(
site_count=Count('sites') site_count=Count('sites')
) )

View File

@ -21,7 +21,7 @@ from .models import (
) )
class RegionFilter(NameSlugSearchFilterSet): class RegionFilter(NameSlugSearchFilterSet, CustomFieldFilterSet):
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=Region.objects.all(), queryset=Region.objects.all(),
label='Parent region (ID)', label='Parent region (ID)',

View File

@ -125,7 +125,7 @@ class MACAddressField(forms.Field):
# Regions # Regions
# #
class RegionForm(BootstrapMixin, forms.ModelForm): class RegionForm(BootstrapMixin, CustomFieldForm):
slug = SlugField() slug = SlugField()
class Meta: class Meta:
@ -160,7 +160,7 @@ class RegionCSVForm(forms.ModelForm):
} }
class RegionFilterForm(BootstrapMixin, forms.Form): class RegionFilterForm(BootstrapMixin, CustomFieldFilterForm):
model = Site model = Site
q = forms.CharField( q = forms.CharField(
required=False, required=False,

View File

@ -183,7 +183,7 @@ class CableTermination(models.Model):
# Regions # Regions
# #
class Region(MPTTModel, ChangeLoggedModel): class Region(MPTTModel, ChangeLoggedModel, CustomFieldModel):
""" """
Sites can be grouped within geographic Regions. Sites can be grouped within geographic Regions.
""" """
@ -202,6 +202,11 @@ class Region(MPTTModel, ChangeLoggedModel):
slug = models.SlugField( slug = models.SlugField(
unique=True unique=True
) )
custom_field_values = GenericRelation(
to='extras.CustomFieldValue',
content_type_field='obj_type',
object_id_field='obj_id'
)
csv_headers = ['name', 'slug', 'parent'] csv_headers = ['name', 'slug', 'parent']

View File

@ -6,6 +6,7 @@ CUSTOMFIELD_MODELS = [
'dcim.devicetype', 'dcim.devicetype',
'dcim.powerfeed', 'dcim.powerfeed',
'dcim.rack', 'dcim.rack',
'dcim.region',
'dcim.site', 'dcim.site',
'ipam.aggregate', 'ipam.aggregate',
'ipam.ipaddress', 'ipam.ipaddress',
@ -55,6 +56,7 @@ CUSTOMLINK_MODELS = [
'dcim.powerpanel', 'dcim.powerpanel',
'dcim.powerfeed', 'dcim.powerfeed',
'dcim.rack', 'dcim.rack',
'dcim.region',
'dcim.site', 'dcim.site',
'ipam.aggregate', 'ipam.aggregate',
'ipam.ipaddress', 'ipam.ipaddress',