From 64adbf87695cca33df2ff00816531b152a7c9106 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 18 Sep 2020 15:46:01 -0400 Subject: [PATCH] Fix migrations to ensure secret assigned_object is required --- .../0011_secret_generic_assignments.py | 20 ++++++++++++++++++- netbox/secrets/models.py | 9 ++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/netbox/secrets/migrations/0011_secret_generic_assignments.py b/netbox/secrets/migrations/0011_secret_generic_assignments.py index 4758a9084..02a0e0e21 100644 --- a/netbox/secrets/migrations/0011_secret_generic_assignments.py +++ b/netbox/secrets/migrations/0011_secret_generic_assignments.py @@ -4,9 +4,10 @@ import django.db.models.deletion def device_to_generic_assignment(apps, schema_editor): ContentType = apps.get_model('contenttypes', 'ContentType') + Device = apps.get_model('dcim', 'Device') 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')) @@ -22,6 +23,8 @@ class Migration(migrations.Migration): name='secret', options={'ordering': ('role', 'name', 'pk')}, ), + + # Add assigned_object type & ID fields migrations.AddField( model_name='secret', 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'), preserve_default=False, ), + migrations.AlterUniqueTogether( name='secret', unique_together={('assigned_object_type', 'assigned_object_id', 'role', 'name')}, ), + + # Copy device assignments and delete device ForeignKey migrations.RunPython( code=device_to_generic_assignment, reverse_code=migrations.RunPython.noop @@ -46,4 +52,16 @@ class Migration(migrations.Migration): model_name='secret', 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'), + ), ] diff --git a/netbox/secrets/models.py b/netbox/secrets/models.py index 2a14aef59..f5508d47d 100644 --- a/netbox/secrets/models.py +++ b/netbox/secrets/models.py @@ -286,14 +286,9 @@ class Secret(ChangeLoggedModel, CustomFieldModel): """ assigned_object_type = models.ForeignKey( to=ContentType, - on_delete=models.PROTECT, - blank=True, - null=True - ) - assigned_object_id = models.PositiveIntegerField( - blank=True, - null=True + on_delete=models.PROTECT ) + assigned_object_id = models.PositiveIntegerField() assigned_object = GenericForeignKey( ct_field='assigned_object_type', fk_field='assigned_object_id'