diff --git a/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py b/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py index 6dffe9446..05b90ef5f 100644 --- a/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py +++ b/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py @@ -2,7 +2,7 @@ import django.contrib.postgres.fields import django.contrib.postgres.fields.ranges -from django.db import migrations +from django.db import migrations, models from django.db.backends.postgresql.psycopg_any import NumericRange @@ -26,6 +26,11 @@ class Migration(migrations.Migration): name='vlan_id_ranges', field=django.contrib.postgres.fields.ArrayField(base_field=django.contrib.postgres.fields.ranges.BigIntegerRangeField(), blank=True, null=True, size=None), ), + migrations.AddField( + model_name='vlangroup', + name='_total_vlan_ids', + field=models.PositiveBigIntegerField(default=0), + ), migrations.RunPython( code=move_min_max, reverse_code=migrations.RunPython.noop diff --git a/netbox/ipam/models/vlans.py b/netbox/ipam/models/vlans.py index cb3dcab69..fe52a6647 100644 --- a/netbox/ipam/models/vlans.py +++ b/netbox/ipam/models/vlans.py @@ -53,6 +53,9 @@ class VLANGroup(OrganizationalModel): blank=True, null=True ) + _total_vlan_ids = models.PositiveBigIntegerField( + default=0 + ) objects = VLANGroupQuerySet.as_manager() @@ -92,6 +95,13 @@ class VLANGroup(OrganizationalModel): 'max_vid': _("Maximum child VID must be greater than or equal to minimum child VID") }) + def save(self, *args, **kwargs): + self._total_vlan_ids = 0 + for range in vland_id_ranges: + self._total_vlan_ids += range.upper - range.lower + 1 + + super().save(*args, **kwargs) + def get_available_vids(self): """ Return all available VLANs within this group.