From beeb6b5946fec1c01bc6f5c47d24e4318f86cf89 Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Tue, 15 Dec 2020 09:00:25 -0600 Subject: [PATCH] Fixes: #5450 - Change all *_count and count_* serializers to have default value --- docs/release-notes/version-2.10.md | 1 + netbox/circuits/api/nested_serializers.py | 4 +- netbox/circuits/api/serializers.py | 4 +- netbox/dcim/api/nested_serializers.py | 24 +++++----- netbox/dcim/api/serializers.py | 44 +++++++++---------- netbox/extras/api/serializers.py | 2 +- netbox/ipam/api/nested_serializers.py | 10 ++--- netbox/ipam/api/serializers.py | 14 +++--- netbox/secrets/api/nested_serializers.py | 2 +- netbox/secrets/api/serializers.py | 2 +- netbox/tenancy/api/nested_serializers.py | 2 +- netbox/tenancy/api/serializers.py | 22 +++++----- netbox/users/api/serializers.py | 2 +- .../virtualization/api/nested_serializers.py | 6 +-- netbox/virtualization/api/serializers.py | 8 ++-- 15 files changed, 74 insertions(+), 73 deletions(-) diff --git a/docs/release-notes/version-2.10.md b/docs/release-notes/version-2.10.md index 7584d8eae..351f5462b 100644 --- a/docs/release-notes/version-2.10.md +++ b/docs/release-notes/version-2.10.md @@ -4,6 +4,7 @@ ### Bug Fixes +* [#5450](https://github.com/netbox-community/netbox/issues/5450) - API serializer foreign count fields do not have a default value * [#5458](https://github.com/netbox-community/netbox/issues/5458) - Creating a component template throws an exception * [#5461](https://github.com/netbox-community/netbox/issues/5461) - Rack Elevations throw reverse match exception diff --git a/netbox/circuits/api/nested_serializers.py b/netbox/circuits/api/nested_serializers.py index 2d3457d2c..e777247b9 100644 --- a/netbox/circuits/api/nested_serializers.py +++ b/netbox/circuits/api/nested_serializers.py @@ -17,7 +17,7 @@ __all__ = [ class NestedProviderSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provider-detail') - circuit_count = serializers.IntegerField(read_only=True) + circuit_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = Provider @@ -30,7 +30,7 @@ class NestedProviderSerializer(WritableNestedSerializer): class NestedCircuitTypeSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittype-detail') - circuit_count = serializers.IntegerField(read_only=True) + circuit_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = CircuitType diff --git a/netbox/circuits/api/serializers.py b/netbox/circuits/api/serializers.py index 88890bf95..6291a8ea8 100644 --- a/netbox/circuits/api/serializers.py +++ b/netbox/circuits/api/serializers.py @@ -17,7 +17,7 @@ from .nested_serializers import * class ProviderSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provider-detail') - circuit_count = serializers.IntegerField(read_only=True) + circuit_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = Provider @@ -33,7 +33,7 @@ class ProviderSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): class CircuitTypeSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittype-detail') - circuit_count = serializers.IntegerField(read_only=True) + circuit_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = CircuitType diff --git a/netbox/dcim/api/nested_serializers.py b/netbox/dcim/api/nested_serializers.py index d63d32d68..23cb9b550 100644 --- a/netbox/dcim/api/nested_serializers.py +++ b/netbox/dcim/api/nested_serializers.py @@ -45,7 +45,7 @@ __all__ = [ class NestedRegionSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:region-detail') - site_count = serializers.IntegerField(read_only=True) + site_count = serializers.IntegerField(read_only=True, default=0) _depth = serializers.IntegerField(source='level', read_only=True) class Meta: @@ -67,7 +67,7 @@ class NestedSiteSerializer(WritableNestedSerializer): class NestedRackGroupSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackgroup-detail') - rack_count = serializers.IntegerField(read_only=True) + rack_count = serializers.IntegerField(read_only=True, default=0) _depth = serializers.IntegerField(source='level', read_only=True) class Meta: @@ -77,7 +77,7 @@ class NestedRackGroupSerializer(WritableNestedSerializer): class NestedRackRoleSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackrole-detail') - rack_count = serializers.IntegerField(read_only=True) + rack_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = models.RackRole @@ -86,7 +86,7 @@ class NestedRackRoleSerializer(WritableNestedSerializer): class NestedRackSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rack-detail') - device_count = serializers.IntegerField(read_only=True) + device_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = models.Rack @@ -111,7 +111,7 @@ class NestedRackReservationSerializer(WritableNestedSerializer): class NestedManufacturerSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:manufacturer-detail') - devicetype_count = serializers.IntegerField(read_only=True) + devicetype_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = models.Manufacturer @@ -121,7 +121,7 @@ class NestedManufacturerSerializer(WritableNestedSerializer): class NestedDeviceTypeSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicetype-detail') manufacturer = NestedManufacturerSerializer(read_only=True) - device_count = serializers.IntegerField(read_only=True) + device_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = models.DeviceType @@ -198,8 +198,8 @@ class NestedDeviceBayTemplateSerializer(WritableNestedSerializer): class NestedDeviceRoleSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicerole-detail') - device_count = serializers.IntegerField(read_only=True) - virtualmachine_count = serializers.IntegerField(read_only=True) + device_count = serializers.IntegerField(read_only=True, default=0) + virtualmachine_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = models.DeviceRole @@ -208,8 +208,8 @@ class NestedDeviceRoleSerializer(WritableNestedSerializer): class NestedPlatformSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:platform-detail') - device_count = serializers.IntegerField(read_only=True) - virtualmachine_count = serializers.IntegerField(read_only=True) + device_count = serializers.IntegerField(read_only=True, default=0) + virtualmachine_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = models.Platform @@ -325,7 +325,7 @@ class NestedCableSerializer(serializers.ModelSerializer): class NestedVirtualChassisSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:virtualchassis-detail') master = NestedDeviceSerializer() - member_count = serializers.IntegerField(read_only=True) + member_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = models.VirtualChassis @@ -338,7 +338,7 @@ class NestedVirtualChassisSerializer(WritableNestedSerializer): class NestedPowerPanelSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerpanel-detail') - powerfeed_count = serializers.IntegerField(read_only=True) + powerfeed_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = models.PowerPanel diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index 6f497bfa6..3a6009148 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -85,7 +85,7 @@ class ConnectedEndpointSerializer(ValidatedModelSerializer): class RegionSerializer(serializers.ModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:region-detail') parent = NestedRegionSerializer(required=False, allow_null=True) - site_count = serializers.IntegerField(read_only=True) + site_count = serializers.IntegerField(read_only=True, default=0) _depth = serializers.IntegerField(source='level', read_only=True) class Meta: @@ -99,12 +99,12 @@ class SiteSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): region = NestedRegionSerializer(required=False, allow_null=True) tenant = NestedTenantSerializer(required=False, allow_null=True) time_zone = TimeZoneField(required=False) - circuit_count = serializers.IntegerField(read_only=True) - device_count = serializers.IntegerField(read_only=True) - prefix_count = serializers.IntegerField(read_only=True) - rack_count = serializers.IntegerField(read_only=True) - virtualmachine_count = serializers.IntegerField(read_only=True) - vlan_count = serializers.IntegerField(read_only=True) + circuit_count = serializers.IntegerField(read_only=True, default=0) + device_count = serializers.IntegerField(read_only=True, default=0) + prefix_count = serializers.IntegerField(read_only=True, default=0) + rack_count = serializers.IntegerField(read_only=True, default=0) + virtualmachine_count = serializers.IntegerField(read_only=True, default=0) + vlan_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = Site @@ -124,7 +124,7 @@ class RackGroupSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackgroup-detail') site = NestedSiteSerializer() parent = NestedRackGroupSerializer(required=False, allow_null=True) - rack_count = serializers.IntegerField(read_only=True) + rack_count = serializers.IntegerField(read_only=True, default=0) _depth = serializers.IntegerField(source='level', read_only=True) class Meta: @@ -134,7 +134,7 @@ class RackGroupSerializer(ValidatedModelSerializer): class RackRoleSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackrole-detail') - rack_count = serializers.IntegerField(read_only=True) + rack_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = RackRole @@ -151,8 +151,8 @@ class RackSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): type = ChoiceField(choices=RackTypeChoices, allow_blank=True, required=False) width = ChoiceField(choices=RackWidthChoices, required=False) outer_unit = ChoiceField(choices=RackDimensionUnitChoices, allow_blank=True, required=False) - device_count = serializers.IntegerField(read_only=True) - powerfeed_count = serializers.IntegerField(read_only=True) + device_count = serializers.IntegerField(read_only=True, default=0) + powerfeed_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = Rack @@ -244,9 +244,9 @@ class RackElevationDetailFilterSerializer(serializers.Serializer): class ManufacturerSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:manufacturer-detail') - devicetype_count = serializers.IntegerField(read_only=True) - inventoryitem_count = serializers.IntegerField(read_only=True) - platform_count = serializers.IntegerField(read_only=True) + devicetype_count = serializers.IntegerField(read_only=True, default=0) + inventoryitem_count = serializers.IntegerField(read_only=True, default=0) + platform_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = Manufacturer @@ -259,7 +259,7 @@ class DeviceTypeSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicetype-detail') manufacturer = NestedManufacturerSerializer() subdevice_role = ChoiceField(choices=SubdeviceRoleChoices, allow_blank=True, required=False) - device_count = serializers.IntegerField(read_only=True) + device_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = DeviceType @@ -380,8 +380,8 @@ class DeviceBayTemplateSerializer(ValidatedModelSerializer): class DeviceRoleSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicerole-detail') - device_count = serializers.IntegerField(read_only=True) - virtualmachine_count = serializers.IntegerField(read_only=True) + device_count = serializers.IntegerField(read_only=True, default=0) + virtualmachine_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = DeviceRole @@ -393,8 +393,8 @@ class DeviceRoleSerializer(ValidatedModelSerializer): class PlatformSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:platform-detail') manufacturer = NestedManufacturerSerializer(required=False, allow_null=True) - device_count = serializers.IntegerField(read_only=True) - virtualmachine_count = serializers.IntegerField(read_only=True) + device_count = serializers.IntegerField(read_only=True, default=0) + virtualmachine_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = Platform @@ -573,7 +573,7 @@ class InterfaceSerializer(TaggedObjectSerializer, CableTerminationSerializer, Co many=True ) cable = NestedCableSerializer(read_only=True) - count_ipaddresses = serializers.IntegerField(read_only=True) + count_ipaddresses = serializers.IntegerField(read_only=True, default=0) class Meta: model = Interface @@ -805,7 +805,7 @@ class InterfaceConnectionSerializer(ValidatedModelSerializer): class VirtualChassisSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:virtualchassis-detail') master = NestedDeviceSerializer(required=False) - member_count = serializers.IntegerField(read_only=True) + member_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = VirtualChassis @@ -824,7 +824,7 @@ class PowerPanelSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): allow_null=True, default=None ) - powerfeed_count = serializers.IntegerField(read_only=True) + powerfeed_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = PowerPanel diff --git a/netbox/extras/api/serializers.py b/netbox/extras/api/serializers.py index a85ca05b7..4bc10f7d8 100644 --- a/netbox/extras/api/serializers.py +++ b/netbox/extras/api/serializers.py @@ -66,7 +66,7 @@ class ExportTemplateSerializer(ValidatedModelSerializer): class TagSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='extras-api:tag-detail') - tagged_items = serializers.IntegerField(read_only=True) + tagged_items = serializers.IntegerField(read_only=True, default=0) class Meta: model = Tag diff --git a/netbox/ipam/api/nested_serializers.py b/netbox/ipam/api/nested_serializers.py index 660db2b22..1c3217ae0 100644 --- a/netbox/ipam/api/nested_serializers.py +++ b/netbox/ipam/api/nested_serializers.py @@ -23,7 +23,7 @@ __all__ = [ class NestedVRFSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vrf-detail') - prefix_count = serializers.IntegerField(read_only=True) + prefix_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = models.VRF @@ -48,7 +48,7 @@ class NestedRouteTargetSerializer(WritableNestedSerializer): class NestedRIRSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='ipam-api:rir-detail') - aggregate_count = serializers.IntegerField(read_only=True) + aggregate_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = models.RIR @@ -70,8 +70,8 @@ class NestedAggregateSerializer(WritableNestedSerializer): class NestedRoleSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='ipam-api:role-detail') - prefix_count = serializers.IntegerField(read_only=True) - vlan_count = serializers.IntegerField(read_only=True) + prefix_count = serializers.IntegerField(read_only=True, default=0) + vlan_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = models.Role @@ -80,7 +80,7 @@ class NestedRoleSerializer(WritableNestedSerializer): class NestedVLANGroupSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlangroup-detail') - vlan_count = serializers.IntegerField(read_only=True) + vlan_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = models.VLANGroup diff --git a/netbox/ipam/api/serializers.py b/netbox/ipam/api/serializers.py index 7552ae0d2..e5c0e33a2 100644 --- a/netbox/ipam/api/serializers.py +++ b/netbox/ipam/api/serializers.py @@ -27,8 +27,8 @@ class VRFSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): tenant = NestedTenantSerializer(required=False, allow_null=True) import_targets = NestedRouteTargetSerializer(required=False, allow_null=True, many=True) export_targets = NestedRouteTargetSerializer(required=False, allow_null=True, many=True) - ipaddress_count = serializers.IntegerField(read_only=True) - prefix_count = serializers.IntegerField(read_only=True) + ipaddress_count = serializers.IntegerField(read_only=True, default=0) + prefix_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = VRF @@ -59,7 +59,7 @@ class RouteTargetSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): class RIRSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='ipam-api:rir-detail') - aggregate_count = serializers.IntegerField(read_only=True) + aggregate_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = RIR @@ -87,8 +87,8 @@ class AggregateSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): class RoleSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='ipam-api:role-detail') - prefix_count = serializers.IntegerField(read_only=True) - vlan_count = serializers.IntegerField(read_only=True) + prefix_count = serializers.IntegerField(read_only=True, default=0) + vlan_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = Role @@ -98,7 +98,7 @@ class RoleSerializer(ValidatedModelSerializer): class VLANGroupSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlangroup-detail') site = NestedSiteSerializer(required=False, allow_null=True) - vlan_count = serializers.IntegerField(read_only=True) + vlan_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = VLANGroup @@ -126,7 +126,7 @@ class VLANSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): tenant = NestedTenantSerializer(required=False, allow_null=True) status = ChoiceField(choices=VLANStatusChoices, required=False) role = NestedRoleSerializer(required=False, allow_null=True) - prefix_count = serializers.IntegerField(read_only=True) + prefix_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = VLAN diff --git a/netbox/secrets/api/nested_serializers.py b/netbox/secrets/api/nested_serializers.py index aaec27c1f..838100865 100644 --- a/netbox/secrets/api/nested_serializers.py +++ b/netbox/secrets/api/nested_serializers.py @@ -19,7 +19,7 @@ class NestedSecretSerializer(WritableNestedSerializer): class NestedSecretRoleSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='secrets-api:secretrole-detail') - secret_count = serializers.IntegerField(read_only=True) + secret_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = SecretRole diff --git a/netbox/secrets/api/serializers.py b/netbox/secrets/api/serializers.py index b08b87bc5..ba19bf207 100644 --- a/netbox/secrets/api/serializers.py +++ b/netbox/secrets/api/serializers.py @@ -17,7 +17,7 @@ from .nested_serializers import * class SecretRoleSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='secrets-api:secretrole-detail') - secret_count = serializers.IntegerField(read_only=True) + secret_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = SecretRole diff --git a/netbox/tenancy/api/nested_serializers.py b/netbox/tenancy/api/nested_serializers.py index 7b227c123..8bb78b6c5 100644 --- a/netbox/tenancy/api/nested_serializers.py +++ b/netbox/tenancy/api/nested_serializers.py @@ -15,7 +15,7 @@ __all__ = [ class NestedTenantGroupSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenantgroup-detail') - tenant_count = serializers.IntegerField(read_only=True) + tenant_count = serializers.IntegerField(read_only=True, default=0) _depth = serializers.IntegerField(source='level', read_only=True) class Meta: diff --git a/netbox/tenancy/api/serializers.py b/netbox/tenancy/api/serializers.py index 05e83853e..594fd8d50 100644 --- a/netbox/tenancy/api/serializers.py +++ b/netbox/tenancy/api/serializers.py @@ -14,7 +14,7 @@ from .nested_serializers import * class TenantGroupSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenantgroup-detail') parent = NestedTenantGroupSerializer(required=False, allow_null=True) - tenant_count = serializers.IntegerField(read_only=True) + tenant_count = serializers.IntegerField(read_only=True, default=0) _depth = serializers.IntegerField(source='level', read_only=True) class Meta: @@ -25,16 +25,16 @@ class TenantGroupSerializer(ValidatedModelSerializer): class TenantSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenant-detail') group = NestedTenantGroupSerializer(required=False) - circuit_count = serializers.IntegerField(read_only=True) - device_count = serializers.IntegerField(read_only=True) - ipaddress_count = serializers.IntegerField(read_only=True) - prefix_count = serializers.IntegerField(read_only=True) - rack_count = serializers.IntegerField(read_only=True) - site_count = serializers.IntegerField(read_only=True) - virtualmachine_count = serializers.IntegerField(read_only=True) - vlan_count = serializers.IntegerField(read_only=True) - vrf_count = serializers.IntegerField(read_only=True) - cluster_count = serializers.IntegerField(read_only=True) + circuit_count = serializers.IntegerField(read_only=True, default=0) + device_count = serializers.IntegerField(read_only=True, default=0) + ipaddress_count = serializers.IntegerField(read_only=True, default=0) + prefix_count = serializers.IntegerField(read_only=True, default=0) + rack_count = serializers.IntegerField(read_only=True, default=0) + site_count = serializers.IntegerField(read_only=True, default=0) + virtualmachine_count = serializers.IntegerField(read_only=True, default=0) + vlan_count = serializers.IntegerField(read_only=True, default=0) + vrf_count = serializers.IntegerField(read_only=True, default=0) + cluster_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = Tenant diff --git a/netbox/users/api/serializers.py b/netbox/users/api/serializers.py index eed0bd80e..a2eaa0c91 100644 --- a/netbox/users/api/serializers.py +++ b/netbox/users/api/serializers.py @@ -40,7 +40,7 @@ class UserSerializer(ValidatedModelSerializer): class GroupSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='users-api:group-detail') - user_count = serializers.IntegerField(read_only=True) + user_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = Group diff --git a/netbox/virtualization/api/nested_serializers.py b/netbox/virtualization/api/nested_serializers.py index 7763f0ef4..c86cbd3f5 100644 --- a/netbox/virtualization/api/nested_serializers.py +++ b/netbox/virtualization/api/nested_serializers.py @@ -19,7 +19,7 @@ __all__ = [ class NestedClusterTypeSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustertype-detail') - cluster_count = serializers.IntegerField(read_only=True) + cluster_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = ClusterType @@ -28,7 +28,7 @@ class NestedClusterTypeSerializer(WritableNestedSerializer): class NestedClusterGroupSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustergroup-detail') - cluster_count = serializers.IntegerField(read_only=True) + cluster_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = ClusterGroup @@ -37,7 +37,7 @@ class NestedClusterGroupSerializer(WritableNestedSerializer): class NestedClusterSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:cluster-detail') - virtualmachine_count = serializers.IntegerField(read_only=True) + virtualmachine_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = Cluster diff --git a/netbox/virtualization/api/serializers.py b/netbox/virtualization/api/serializers.py index 518b7086c..8813c2644 100644 --- a/netbox/virtualization/api/serializers.py +++ b/netbox/virtualization/api/serializers.py @@ -20,7 +20,7 @@ from .nested_serializers import * class ClusterTypeSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustertype-detail') - cluster_count = serializers.IntegerField(read_only=True) + cluster_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = ClusterType @@ -29,7 +29,7 @@ class ClusterTypeSerializer(ValidatedModelSerializer): class ClusterGroupSerializer(ValidatedModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustergroup-detail') - cluster_count = serializers.IntegerField(read_only=True) + cluster_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = ClusterGroup @@ -42,8 +42,8 @@ class ClusterSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): group = NestedClusterGroupSerializer(required=False, allow_null=True) tenant = NestedTenantSerializer(required=False, allow_null=True) site = NestedSiteSerializer(required=False, allow_null=True) - device_count = serializers.IntegerField(read_only=True) - virtualmachine_count = serializers.IntegerField(read_only=True) + device_count = serializers.IntegerField(read_only=True, default=0) + virtualmachine_count = serializers.IntegerField(read_only=True, default=0) class Meta: model = Cluster