feat: support partial-width rack devices
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import django.core.validators
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
def drop_core_rack_position_constraint(apps, schema_editor):
|
||||
if schema_editor.connection.vendor == "postgresql":
|
||||
schema_editor.execute(
|
||||
'ALTER TABLE "dcim_device" DROP CONSTRAINT IF EXISTS "dcim_device_unique_rack_position_face"'
|
||||
)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("dcim", "0237_module_remove_local_context_data"),
|
||||
("netbox_utilities", "0006_retrace_existing_patchpanel_paths"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="DeviceRackPlacement",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID"),
|
||||
),
|
||||
(
|
||||
"width",
|
||||
models.PositiveSmallIntegerField(
|
||||
choices=[(2, "1/2 Rackbreite"), (3, "1/3 Rackbreite"), (4, "1/4 Rackbreite")]
|
||||
),
|
||||
),
|
||||
(
|
||||
"horizontal_position",
|
||||
models.PositiveSmallIntegerField(
|
||||
help_text="Position von links innerhalb der Rackbreite.",
|
||||
validators=[
|
||||
django.core.validators.MinValueValidator(1),
|
||||
django.core.validators.MaxValueValidator(4),
|
||||
],
|
||||
),
|
||||
),
|
||||
("updated", models.DateTimeField(auto_now=True)),
|
||||
(
|
||||
"device",
|
||||
models.OneToOneField(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="netbox_utilities_rack_placement",
|
||||
to="dcim.device",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Gerätebreite im Rack",
|
||||
"verbose_name_plural": "Gerätebreiten im Rack",
|
||||
"constraints": [
|
||||
models.CheckConstraint(
|
||||
condition=models.Q(width__gte=models.F("horizontal_position")),
|
||||
name="netbox_utilities_placement_position_within_width",
|
||||
)
|
||||
],
|
||||
},
|
||||
),
|
||||
migrations.RunPython(drop_core_rack_position_constraint, migrations.RunPython.noop),
|
||||
]
|
||||
Reference in New Issue
Block a user