0070_vlangroup_vlan_id_ranges.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import django.contrib.postgres.fields
  2. import django.contrib.postgres.fields.ranges
  3. from django.db import migrations, models
  4. from django.db.backends.postgresql.psycopg_any import NumericRange
  5. import ipam.models.vlans
  6. def set_vid_ranges(apps, schema_editor):
  7. """
  8. Convert the min_vid & max_vid fields to a range in the new vid_ranges ArrayField.
  9. """
  10. VLANGroup = apps.get_model('ipam', 'VLANGroup')
  11. for group in VLANGroup.objects.all():
  12. group.vid_ranges = [
  13. NumericRange(group.min_vid, group.max_vid, bounds='[]')
  14. ]
  15. group._total_vlan_ids = group.max_vid - group.min_vid + 1
  16. group.save()
  17. class Migration(migrations.Migration):
  18. dependencies = [
  19. ('ipam', '0069_gfk_indexes'),
  20. ]
  21. operations = [
  22. migrations.AddField(
  23. model_name='vlangroup',
  24. name='vid_ranges',
  25. field=django.contrib.postgres.fields.ArrayField(
  26. base_field=django.contrib.postgres.fields.ranges.IntegerRangeField(),
  27. default=ipam.models.vlans.default_vid_ranges,
  28. size=None
  29. ),
  30. ),
  31. migrations.AddField(
  32. model_name='vlangroup',
  33. name='_total_vlan_ids',
  34. field=models.PositiveBigIntegerField(default=4094),
  35. ),
  36. migrations.RunPython(
  37. code=set_vid_ranges,
  38. reverse_code=migrations.RunPython.noop
  39. ),
  40. migrations.RemoveField(
  41. model_name='vlangroup',
  42. name='max_vid',
  43. ),
  44. migrations.RemoveField(
  45. model_name='vlangroup',
  46. name='min_vid',
  47. ),
  48. ]