0044_cluster_scope.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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 scope GFK.
  6. """
  7. ContentType = apps.get_model('contenttypes', 'ContentType')
  8. Cluster = apps.get_model('virtualization', 'Cluster')
  9. Site = apps.get_model('dcim', 'Site')
  10. Cluster.objects.filter(site__isnull=False).update(
  11. scope_type=ContentType.objects.get_for_model(Site),
  12. scope_id=models.F('site_id')
  13. )
  14. class Migration(migrations.Migration):
  15. dependencies = [
  16. ('contenttypes', '0002_remove_content_type_name'),
  17. ('virtualization', '0043_qinq_svlan'),
  18. ]
  19. operations = [
  20. migrations.AddField(
  21. model_name='cluster',
  22. name='scope_id',
  23. field=models.PositiveBigIntegerField(blank=True, null=True),
  24. ),
  25. migrations.AddField(
  26. model_name='cluster',
  27. name='scope_type',
  28. field=models.ForeignKey(
  29. blank=True,
  30. limit_choices_to=models.Q(('model__in', ('region', 'sitegroup', 'site', 'location'))),
  31. null=True,
  32. on_delete=django.db.models.deletion.PROTECT,
  33. related_name='+',
  34. to='contenttypes.contenttype',
  35. ),
  36. ),
  37. # Copy over existing site assignments
  38. migrations.RunPython(
  39. code=copy_site_assignments,
  40. reverse_code=migrations.RunPython.noop
  41. ),
  42. ]