0047_circuittermination__termination.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import django.db.models.deletion
  2. from django.db import migrations, models
  3. def copy_site_assignments(apps, schema_editor):
  4. """
  5. Copy site ForeignKey values to the Termination GFK.
  6. """
  7. ContentType = apps.get_model('contenttypes', 'ContentType')
  8. CircuitTermination = apps.get_model('circuits', 'CircuitTermination')
  9. Site = apps.get_model('dcim', 'Site')
  10. CircuitTermination.objects.filter(site__isnull=False).update(
  11. termination_type=ContentType.objects.get_for_model(Site),
  12. termination_id=models.F('site_id')
  13. )
  14. ProviderNetwork = apps.get_model('circuits', 'ProviderNetwork')
  15. CircuitTermination.objects.filter(provider_network__isnull=False).update(
  16. termination_type=ContentType.objects.get_for_model(ProviderNetwork),
  17. termination_id=models.F('provider_network_id')
  18. )
  19. class Migration(migrations.Migration):
  20. dependencies = [
  21. ('circuits', '0046_charfield_null_choices'),
  22. ('contenttypes', '0002_remove_content_type_name'),
  23. ('dcim', '0193_poweroutlet_color'),
  24. ]
  25. operations = [
  26. migrations.AddField(
  27. model_name='circuittermination',
  28. name='termination_id',
  29. field=models.PositiveBigIntegerField(blank=True, null=True),
  30. ),
  31. migrations.AddField(
  32. model_name='circuittermination',
  33. name='termination_type',
  34. field=models.ForeignKey(
  35. blank=True,
  36. limit_choices_to=models.Q(('model__in', ('region', 'sitegroup', 'site', 'location', 'providernetwork'))),
  37. null=True,
  38. on_delete=django.db.models.deletion.PROTECT,
  39. related_name='+',
  40. to='contenttypes.contenttype',
  41. ),
  42. ),
  43. # Copy over existing site assignments
  44. migrations.RunPython(
  45. code=copy_site_assignments,
  46. reverse_code=migrations.RunPython.noop
  47. ),
  48. ]