0051_virtualcircuit_group_assignment.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import django.db.models.deletion
  2. from django.db import migrations, models
  3. def set_member_type(apps, schema_editor):
  4. """
  5. Set member_type on any existing CircuitGroupAssignments to the content type for Circuit.
  6. """
  7. ContentType = apps.get_model('contenttypes', 'ContentType')
  8. Circuit = apps.get_model('circuits', 'Circuit')
  9. CircuitGroupAssignment = apps.get_model('circuits', 'CircuitGroupAssignment')
  10. CircuitGroupAssignment.objects.update(
  11. member_type=ContentType.objects.get_for_model(Circuit)
  12. )
  13. class Migration(migrations.Migration):
  14. dependencies = [
  15. ('circuits', '0050_virtual_circuits'),
  16. ('contenttypes', '0002_remove_content_type_name'),
  17. ('extras', '0122_charfield_null_choices'),
  18. ]
  19. operations = [
  20. migrations.RemoveConstraint(
  21. model_name='circuitgroupassignment',
  22. name='circuits_circuitgroupassignment_unique_circuit_group',
  23. ),
  24. migrations.AlterModelOptions(
  25. name='circuitgroupassignment',
  26. options={'ordering': ('group', 'member_type', 'member_id', 'priority', 'pk')},
  27. ),
  28. # Change member_id to an integer field for the member GFK
  29. migrations.RenameField(
  30. model_name='circuitgroupassignment',
  31. old_name='circuit',
  32. new_name='member_id',
  33. ),
  34. migrations.AlterField(
  35. model_name='circuitgroupassignment',
  36. name='member_id',
  37. field=models.PositiveBigIntegerField(),
  38. ),
  39. # Add content type pointer for the member GFK
  40. migrations.AddField(
  41. model_name='circuitgroupassignment',
  42. name='member_type',
  43. field=models.ForeignKey(
  44. on_delete=django.db.models.deletion.PROTECT,
  45. limit_choices_to=models.Q(('app_label', 'circuits'), ('model__in', ['circuit', 'virtualcircuit'])),
  46. related_name='+',
  47. to='contenttypes.contenttype',
  48. blank=True,
  49. null=True
  50. ),
  51. preserve_default=False,
  52. ),
  53. # Populate member_type for any existing assignments
  54. migrations.RunPython(code=set_member_type, reverse_code=migrations.RunPython.noop),
  55. # Disallow null values for member_type
  56. migrations.AlterField(
  57. model_name='circuitgroupassignment',
  58. name='member_type',
  59. field=models.ForeignKey(
  60. limit_choices_to=models.Q(('app_label', 'circuits'), ('model__in', ['circuit', 'virtualcircuit'])),
  61. on_delete=django.db.models.deletion.PROTECT,
  62. related_name='+',
  63. to='contenttypes.contenttype'
  64. ),
  65. ),
  66. migrations.AddConstraint(
  67. model_name='circuitgroupassignment',
  68. constraint=models.UniqueConstraint(
  69. fields=('member_type', 'member_id', 'group'),
  70. name='circuits_circuitgroupassignment_unique_member_group'
  71. ),
  72. ),
  73. ]