Files
Netbox-Utilities/netbox_utilities/migrations/0007_devicerackplacement.py
T

66 lines
2.4 KiB
Python

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),
]