0048_circuitterminations_cached_relations.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # Generated by Django 5.0.9 on 2024-10-21 17:34
  2. import django.db.models.deletion
  3. from django.db import migrations, models
  4. def populate_denormalized_fields(apps, schema_editor):
  5. """
  6. Copy site ForeignKey values to the Termination GFK.
  7. """
  8. CircuitTermination = apps.get_model('circuits', 'CircuitTermination')
  9. terminations = CircuitTermination.objects.filter(site__isnull=False).prefetch_related('site')
  10. for termination in terminations:
  11. termination._region_id = termination.site.region_id
  12. termination._site_group_id = termination.site.group_id
  13. termination._site_id = termination.site_id
  14. # Note: Location cannot be set prior to migration
  15. CircuitTermination.objects.bulk_update(terminations, ['_region', '_site_group', '_site'])
  16. class Migration(migrations.Migration):
  17. dependencies = [
  18. ('circuits', '0047_circuittermination__termination'),
  19. ]
  20. operations = [
  21. migrations.AddField(
  22. model_name='circuittermination',
  23. name='_location',
  24. field=models.ForeignKey(
  25. blank=True,
  26. null=True,
  27. on_delete=django.db.models.deletion.CASCADE,
  28. related_name='circuit_terminations',
  29. to='dcim.location',
  30. ),
  31. ),
  32. migrations.AddField(
  33. model_name='circuittermination',
  34. name='_region',
  35. field=models.ForeignKey(
  36. blank=True,
  37. null=True,
  38. on_delete=django.db.models.deletion.CASCADE,
  39. related_name='circuit_terminations',
  40. to='dcim.region',
  41. ),
  42. ),
  43. migrations.AddField(
  44. model_name='circuittermination',
  45. name='_site',
  46. field=models.ForeignKey(
  47. blank=True,
  48. null=True,
  49. on_delete=django.db.models.deletion.CASCADE,
  50. related_name='circuit_terminations',
  51. to='dcim.site',
  52. ),
  53. ),
  54. migrations.AddField(
  55. model_name='circuittermination',
  56. name='_site_group',
  57. field=models.ForeignKey(
  58. blank=True,
  59. null=True,
  60. on_delete=django.db.models.deletion.CASCADE,
  61. related_name='circuit_terminations',
  62. to='dcim.sitegroup',
  63. ),
  64. ),
  65. # Populate denormalized FK values
  66. migrations.RunPython(code=populate_denormalized_fields, reverse_code=migrations.RunPython.noop),
  67. # Delete the site ForeignKey
  68. migrations.RemoveField(
  69. model_name='circuittermination',
  70. name='site',
  71. ),
  72. migrations.RenameField(
  73. model_name='circuittermination',
  74. old_name='provider_network',
  75. new_name='_provider_network',
  76. ),
  77. ]