From 907323d46fd1b507c08f89cd750774969801ae49 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Fri, 29 Apr 2022 09:16:49 -0400 Subject: [PATCH] Revert initial model changes --- netbox/dcim/filtersets.py | 6 ++-- netbox/dcim/forms/connections.py | 5 +++ .../0154_cable_add_termination_id_arrays.py | 24 ------------- .../0155_cable_copy_termination_ids.py | 36 ------------------- .../0156_cable_delete_old_termination_ids.py | 25 ------------- netbox/dcim/models/cables.py | 18 ++++++---- 6 files changed, 20 insertions(+), 94 deletions(-) delete mode 100644 netbox/dcim/migrations/0154_cable_add_termination_id_arrays.py delete mode 100644 netbox/dcim/migrations/0155_cable_copy_termination_ids.py delete mode 100644 netbox/dcim/migrations/0156_cable_delete_old_termination_ids.py diff --git a/netbox/dcim/filtersets.py b/netbox/dcim/filtersets.py index 563c5d4ce..19c3a414e 100644 --- a/netbox/dcim/filtersets.py +++ b/netbox/dcim/filtersets.py @@ -1499,9 +1499,9 @@ class VirtualChassisFilterSet(NetBoxModelFilterSet): class CableFilterSet(TenancyFilterSet, NetBoxModelFilterSet): termination_a_type = ContentTypeFilter() - termination_a_ids = MultiValueNumberFilter() + termination_a_id = MultiValueNumberFilter() termination_b_type = ContentTypeFilter() - termination_b_ids = MultiValueNumberFilter() + termination_b_id = MultiValueNumberFilter() type = django_filters.MultipleChoiceFilter( choices=CableTypeChoices ) @@ -1537,7 +1537,7 @@ class CableFilterSet(TenancyFilterSet, NetBoxModelFilterSet): class Meta: model = Cable - fields = ['id', 'label', 'length', 'length_unit', 'termination_a_ids', 'termination_b_ids'] + fields = ['id', 'label', 'length', 'length_unit', 'termination_a_id', 'termination_b_id'] def search(self, queryset, name, value): if not value.strip(): diff --git a/netbox/dcim/forms/connections.py b/netbox/dcim/forms/connections.py index a56099b3e..bcac15044 100644 --- a/netbox/dcim/forms/connections.py +++ b/netbox/dcim/forms/connections.py @@ -83,6 +83,11 @@ class ConnectCableToDeviceForm(TenancyForm, NetBoxModelForm): 'rack_id': '$termination_b_rack', } ) + termination_b_ids = DynamicModelMultipleChoiceField( + queryset=Interface.objects.all(), + label='Name', + disabled_indicator='_occupied' + ) class Meta: model = Cable diff --git a/netbox/dcim/migrations/0154_cable_add_termination_id_arrays.py b/netbox/dcim/migrations/0154_cable_add_termination_id_arrays.py deleted file mode 100644 index 40e215a3d..000000000 --- a/netbox/dcim/migrations/0154_cable_add_termination_id_arrays.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 4.0.4 on 2022-04-25 16:35 - -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0153_created_datetimefield'), - ] - - operations = [ - migrations.AddField( - model_name='cable', - name='termination_a_ids', - field=django.contrib.postgres.fields.ArrayField(base_field=models.PositiveBigIntegerField(), null=True, size=None), - ), - migrations.AddField( - model_name='cable', - name='termination_b_ids', - field=django.contrib.postgres.fields.ArrayField(base_field=models.PositiveBigIntegerField(), null=True, size=None), - ), - ] diff --git a/netbox/dcim/migrations/0155_cable_copy_termination_ids.py b/netbox/dcim/migrations/0155_cable_copy_termination_ids.py deleted file mode 100644 index 5e1effa51..000000000 --- a/netbox/dcim/migrations/0155_cable_copy_termination_ids.py +++ /dev/null @@ -1,36 +0,0 @@ -from django.contrib.postgres.fields import ArrayField -from django.db import migrations -from django.db.models import ExpressionWrapper, F - - -def copy_termination_ids(apps, schema_editor): - """ - Copy original A & B termination ID values to new array fields. - """ - Cable = apps.get_model('dcim', 'Cable') - - # TODO: Optimize data migration using F expressions - # Cable.objects.update( - # termination_a_ids=ExpressionWrapper(F('termination_a_id'), output_field=ArrayField), - # termination_b_ids=ExpressionWrapper(F('termination_b_id'), output_field=ArrayField) - # ) - - for cable in Cable.objects.all(): - Cable.objects.filter(pk=cable.pk).update( - termination_a_ids=[cable.termination_a_id], - termination_b_ids=[cable.termination_b_id] - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0154_cable_add_termination_id_arrays'), - ] - - operations = [ - migrations.RunPython( - code=copy_termination_ids, - reverse_code=migrations.RunPython.noop - ), - ] diff --git a/netbox/dcim/migrations/0156_cable_delete_old_termination_ids.py b/netbox/dcim/migrations/0156_cable_delete_old_termination_ids.py deleted file mode 100644 index 942a27df6..000000000 --- a/netbox/dcim/migrations/0156_cable_delete_old_termination_ids.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 4.0.4 on 2022-04-25 20:45 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('dcim', '0155_cable_copy_termination_ids'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='cable', - unique_together=set(), - ), - migrations.RemoveField( - model_name='cable', - name='termination_a_id', - ), - migrations.RemoveField( - model_name='cable', - name='termination_b_id', - ), - ] diff --git a/netbox/dcim/models/cables.py b/netbox/dcim/models/cables.py index 0edda0f5e..680ea78a8 100644 --- a/netbox/dcim/models/cables.py +++ b/netbox/dcim/models/cables.py @@ -39,9 +39,10 @@ class Cable(NetBoxModel): on_delete=models.PROTECT, related_name='+' ) - termination_a_ids = ArrayField( - base_field=models.PositiveBigIntegerField(), - null=True + termination_a_id = models.PositiveBigIntegerField() + termination_a = GenericForeignKey( + ct_field='termination_a_type', + fk_field='termination_a_id' ) termination_b_type = models.ForeignKey( to=ContentType, @@ -49,9 +50,10 @@ class Cable(NetBoxModel): on_delete=models.PROTECT, related_name='+' ) - termination_b_ids = ArrayField( - base_field=models.PositiveBigIntegerField(), - null=True + termination_b_id = models.PositiveBigIntegerField() + termination_b = GenericForeignKey( + ct_field='termination_b_type', + fk_field='termination_b_id' ) type = models.CharField( max_length=50, @@ -114,6 +116,10 @@ class Cable(NetBoxModel): class Meta: ordering = ['pk'] + unique_together = ( + ('termination_a_type', 'termination_a_id'), + ('termination_b_type', 'termination_b_id'), + ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)