Просмотр исходного кода

Fix migrations to ensure secret assigned_object is required

Jeremy Stretch 5 лет назад
Родитель
Сommit
64adbf8769

+ 19 - 1
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'),
+        ),
     ]

+ 2 - 7
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'