Fix migrations to ensure secret assigned_object is required

This commit is contained in:
Jeremy Stretch 2020-09-18 15:46:01 -04:00
parent 43f3e682c5
commit 64adbf8769
2 changed files with 21 additions and 8 deletions

View File

@ -4,9 +4,10 @@ import django.db.models.deletion
def device_to_generic_assignment(apps, schema_editor): def device_to_generic_assignment(apps, schema_editor):
ContentType = apps.get_model('contenttypes', 'ContentType') ContentType = apps.get_model('contenttypes', 'ContentType')
Device = apps.get_model('dcim', 'Device')
Secret = apps.get_model('secrets', 'Secret') Secret = apps.get_model('secrets', 'Secret')
device_ct = ContentType.objects.get(app_label='dcim', model='device') device_ct = ContentType.objects.get_for_model(Device)
Secret.objects.update(assigned_object_type=device_ct, assigned_object_id=models.F('device_id')) Secret.objects.update(assigned_object_type=device_ct, assigned_object_id=models.F('device_id'))
@ -22,6 +23,8 @@ class Migration(migrations.Migration):
name='secret', name='secret',
options={'ordering': ('role', 'name', 'pk')}, options={'ordering': ('role', 'name', 'pk')},
), ),
# Add assigned_object type & ID fields
migrations.AddField( migrations.AddField(
model_name='secret', model_name='secret',
name='assigned_object_id', name='assigned_object_id',
@ -34,10 +37,13 @@ class Migration(migrations.Migration):
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype'), field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype'),
preserve_default=False, preserve_default=False,
), ),
migrations.AlterUniqueTogether( migrations.AlterUniqueTogether(
name='secret', name='secret',
unique_together={('assigned_object_type', 'assigned_object_id', 'role', 'name')}, unique_together={('assigned_object_type', 'assigned_object_id', 'role', 'name')},
), ),
# Copy device assignments and delete device ForeignKey
migrations.RunPython( migrations.RunPython(
code=device_to_generic_assignment, code=device_to_generic_assignment,
reverse_code=migrations.RunPython.noop reverse_code=migrations.RunPython.noop
@ -46,4 +52,16 @@ class Migration(migrations.Migration):
model_name='secret', model_name='secret',
name='device', name='device',
), ),
# Remove blank/null from assigned_object fields
migrations.AlterField(
model_name='secret',
name='assigned_object_id',
field=models.PositiveIntegerField(),
),
migrations.AlterField(
model_name='secret',
name='assigned_object_type',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype'),
),
] ]

View File

@ -286,14 +286,9 @@ class Secret(ChangeLoggedModel, CustomFieldModel):
""" """
assigned_object_type = models.ForeignKey( assigned_object_type = models.ForeignKey(
to=ContentType, to=ContentType,
on_delete=models.PROTECT, on_delete=models.PROTECT
blank=True,
null=True
)
assigned_object_id = models.PositiveIntegerField(
blank=True,
null=True
) )
assigned_object_id = models.PositiveIntegerField()
assigned_object = GenericForeignKey( assigned_object = GenericForeignKey(
ct_field='assigned_object_type', ct_field='assigned_object_type',
fk_field='assigned_object_id' fk_field='assigned_object_id'