Set blank=True on denormalized ForeignKeys

This commit is contained in:
Jeremy Stretch 2025-07-30 11:34:56 -04:00
parent 8643cbce1e
commit 4038b13019
2 changed files with 73 additions and 30 deletions

View File

@ -37,210 +37,250 @@ class Migration(migrations.Migration):
model_name='consoleport', model_name='consoleport',
name='_location', name='_location',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.location' blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name='+',
to='dcim.location',
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='consoleport', model_name='consoleport',
name='_rack', name='_rack',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='consoleport', model_name='consoleport',
name='_site', name='_site',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='consoleserverport', model_name='consoleserverport',
name='_location', name='_location',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.location' blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name='+',
to='dcim.location',
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='consoleserverport', model_name='consoleserverport',
name='_rack', name='_rack',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='consoleserverport', model_name='consoleserverport',
name='_site', name='_site',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='devicebay', model_name='devicebay',
name='_location', name='_location',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.location' blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name='+',
to='dcim.location',
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='devicebay', model_name='devicebay',
name='_rack', name='_rack',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='devicebay', model_name='devicebay',
name='_site', name='_site',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='frontport', model_name='frontport',
name='_location', name='_location',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.location' blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name='+',
to='dcim.location',
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='frontport', model_name='frontport',
name='_rack', name='_rack',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='frontport', model_name='frontport',
name='_site', name='_site',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='interface', model_name='interface',
name='_location', name='_location',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.location' blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name='+',
to='dcim.location',
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='interface', model_name='interface',
name='_rack', name='_rack',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='interface', model_name='interface',
name='_site', name='_site',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='inventoryitem', model_name='inventoryitem',
name='_location', name='_location',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.location' blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name='+',
to='dcim.location',
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='inventoryitem', model_name='inventoryitem',
name='_rack', name='_rack',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='inventoryitem', model_name='inventoryitem',
name='_site', name='_site',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='modulebay', model_name='modulebay',
name='_location', name='_location',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.location' blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name='+',
to='dcim.location',
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='modulebay', model_name='modulebay',
name='_rack', name='_rack',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='modulebay', model_name='modulebay',
name='_site', name='_site',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='poweroutlet', model_name='poweroutlet',
name='_location', name='_location',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.location' blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name='+',
to='dcim.location',
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='poweroutlet', model_name='poweroutlet',
name='_rack', name='_rack',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='poweroutlet', model_name='poweroutlet',
name='_site', name='_site',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='powerport', model_name='powerport',
name='_location', name='_location',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.location' blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name='+',
to='dcim.location',
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='powerport', model_name='powerport',
name='_rack', name='_rack',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='powerport', model_name='powerport',
name='_site', name='_site',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='rearport', model_name='rearport',
name='_location', name='_location',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.location' blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name='+',
to='dcim.location',
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='rearport', model_name='rearport',
name='_rack', name='_rack',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.rack'
), ),
), ),
migrations.AddField( migrations.AddField(
model_name='rearport', model_name='rearport',
name='_site', name='_site',
field=models.ForeignKey( field=models.ForeignKey(
null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site' blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.site'
), ),
), ),
migrations.RunPython(populate_denormalized_data), migrations.RunPython(populate_denormalized_data),

View File

@ -70,18 +70,21 @@ class ComponentModel(NetBoxModel):
to='dcim.Site', to='dcim.Site',
on_delete=models.SET_NULL, on_delete=models.SET_NULL,
related_name='+', related_name='+',
blank=True,
null=True, null=True,
) )
_location = models.ForeignKey( _location = models.ForeignKey(
to='dcim.Location', to='dcim.Location',
on_delete=models.SET_NULL, on_delete=models.SET_NULL,
related_name='+', related_name='+',
blank=True,
null=True, null=True,
) )
_rack = models.ForeignKey( _rack = models.ForeignKey(
to='dcim.Rack', to='dcim.Rack',
on_delete=models.SET_NULL, on_delete=models.SET_NULL,
related_name='+', related_name='+',
blank=True,
null=True, null=True,
) )