Rename circuit to member on CircuitGroupAssignment

This commit is contained in:
Jeremy Stretch 2025-01-02 09:23:29 -05:00
parent 0cda10a204
commit 73fa32c01a
14 changed files with 81 additions and 46 deletions

View File

@ -154,14 +154,14 @@ class CircuitTerminationSerializer(NetBoxModelSerializer, CabledObjectSerializer
class CircuitGroupAssignmentSerializer(CircuitGroupAssignmentSerializer_): class CircuitGroupAssignmentSerializer(CircuitGroupAssignmentSerializer_):
circuit = CircuitSerializer(nested=True) member = CircuitSerializer(nested=True)
class Meta: class Meta:
model = CircuitGroupAssignment model = CircuitGroupAssignment
fields = [ fields = [
'id', 'url', 'display_url', 'display', 'group', 'circuit', 'priority', 'tags', 'created', 'last_updated', 'id', 'url', 'display_url', 'display', 'group', 'member', 'priority', 'tags', 'created', 'last_updated',
] ]
brief_fields = ('id', 'url', 'display', 'group', 'circuit', 'priority') brief_fields = ('id', 'url', 'display', 'group', 'member', 'priority')
class VirtualCircuitSerializer(NetBoxModelSerializer): class VirtualCircuitSerializer(NetBoxModelSerializer):

View File

@ -366,22 +366,22 @@ class CircuitGroupAssignmentFilterSet(NetBoxModelFilterSet):
label=_('Search'), label=_('Search'),
) )
provider_id = django_filters.ModelMultipleChoiceFilter( provider_id = django_filters.ModelMultipleChoiceFilter(
field_name='circuit__provider', field_name='member__provider',
queryset=Provider.objects.all(), queryset=Provider.objects.all(),
label=_('Provider (ID)'), label=_('Provider (ID)'),
) )
provider = django_filters.ModelMultipleChoiceFilter( provider = django_filters.ModelMultipleChoiceFilter(
field_name='circuit__provider__slug', field_name='member__provider__slug',
queryset=Provider.objects.all(), queryset=Provider.objects.all(),
to_field_name='slug', to_field_name='slug',
label=_('Provider (slug)'), label=_('Provider (slug)'),
) )
circuit_id = django_filters.ModelMultipleChoiceFilter( member_id = django_filters.ModelMultipleChoiceFilter(
queryset=Circuit.objects.all(), queryset=Circuit.objects.all(),
label=_('Circuit (ID)'), label=_('Circuit (ID)'),
) )
circuit = django_filters.ModelMultipleChoiceFilter( member = django_filters.ModelMultipleChoiceFilter(
field_name='circuit__cid', field_name='member__cid',
queryset=Circuit.objects.all(), queryset=Circuit.objects.all(),
to_field_name='cid', to_field_name='cid',
label=_('Circuit (CID)'), label=_('Circuit (CID)'),
@ -405,7 +405,7 @@ class CircuitGroupAssignmentFilterSet(NetBoxModelFilterSet):
if not value.strip(): if not value.strip():
return queryset return queryset
return queryset.filter( return queryset.filter(
Q(circuit__cid__icontains=value) | Q(member__cid__icontains=value) |
Q(group__name__icontains=value) Q(group__name__icontains=value)
) )

View File

@ -279,7 +279,7 @@ class CircuitGroupBulkEditForm(NetBoxModelBulkEditForm):
class CircuitGroupAssignmentBulkEditForm(NetBoxModelBulkEditForm): class CircuitGroupAssignmentBulkEditForm(NetBoxModelBulkEditForm):
circuit = DynamicModelChoiceField( member = DynamicModelChoiceField(
label=_('Circuit'), label=_('Circuit'),
queryset=Circuit.objects.all(), queryset=Circuit.objects.all(),
required=False required=False
@ -292,7 +292,7 @@ class CircuitGroupAssignmentBulkEditForm(NetBoxModelBulkEditForm):
model = CircuitGroupAssignment model = CircuitGroupAssignment
fieldsets = ( fieldsets = (
FieldSet('circuit', 'priority'), FieldSet('member', 'priority'),
) )
nullable_fields = ('priority',) nullable_fields = ('priority',)

View File

@ -182,7 +182,7 @@ class CircuitGroupAssignmentImportForm(NetBoxModelImportForm):
class Meta: class Meta:
model = CircuitGroupAssignment model = CircuitGroupAssignment
fields = ('circuit', 'group', 'priority') fields = ('member', 'group', 'priority')
class VirtualCircuitImportForm(NetBoxModelImportForm): class VirtualCircuitImportForm(NetBoxModelImportForm):

View File

@ -277,14 +277,14 @@ class CircuitGroupAssignmentFilterForm(NetBoxModelFilterSetForm):
model = CircuitGroupAssignment model = CircuitGroupAssignment
fieldsets = ( fieldsets = (
FieldSet('q', 'filter_id', 'tag'), FieldSet('q', 'filter_id', 'tag'),
FieldSet('provider_id', 'circuit_id', 'group_id', 'priority', name=_('Assignment')), FieldSet('provider_id', 'member_id', 'group_id', 'priority', name=_('Assignment')),
) )
provider_id = DynamicModelMultipleChoiceField( provider_id = DynamicModelMultipleChoiceField(
queryset=Provider.objects.all(), queryset=Provider.objects.all(),
required=False, required=False,
label=_('Provider') label=_('Provider')
) )
circuit_id = DynamicModelMultipleChoiceField( member_id = DynamicModelMultipleChoiceField(
queryset=Circuit.objects.all(), queryset=Circuit.objects.all(),
required=False, required=False,
label=_('Circuit') label=_('Circuit')

View File

@ -251,7 +251,7 @@ class CircuitGroupAssignmentForm(NetBoxModelForm):
label=_('Group'), label=_('Group'),
queryset=CircuitGroup.objects.all(), queryset=CircuitGroup.objects.all(),
) )
circuit = DynamicModelChoiceField( member = DynamicModelChoiceField(
label=_('Circuit'), label=_('Circuit'),
queryset=Circuit.objects.all(), queryset=Circuit.objects.all(),
selector=True selector=True
@ -260,7 +260,7 @@ class CircuitGroupAssignmentForm(NetBoxModelForm):
class Meta: class Meta:
model = CircuitGroupAssignment model = CircuitGroupAssignment
fields = [ fields = [
'group', 'circuit', 'priority', 'tags', 'group', 'member', 'priority', 'tags',
] ]

View File

@ -121,7 +121,7 @@ class CircuitGroupType(OrganizationalObjectType):
) )
class CircuitGroupAssignmentType(TagsMixin, BaseObjectType): class CircuitGroupAssignmentType(TagsMixin, BaseObjectType):
group: Annotated["CircuitGroupType", strawberry.lazy('circuits.graphql.types')] group: Annotated["CircuitGroupType", strawberry.lazy('circuits.graphql.types')]
circuit: Annotated["CircuitType", strawberry.lazy('circuits.graphql.types')] member: Annotated["CircuitType", strawberry.lazy('circuits.graphql.types')]
@strawberry_django.type( @strawberry_django.type(

View File

@ -0,0 +1,32 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('circuits', '0050_virtual_circuits'),
('extras', '0122_charfield_null_choices'),
]
operations = [
migrations.AlterModelOptions(
name='circuitgroupassignment',
options={'ordering': ('group', 'member', 'priority', 'pk')},
),
migrations.RemoveConstraint(
model_name='circuitgroupassignment',
name='circuits_circuitgroupassignment_unique_circuit_group',
),
migrations.RenameField(
model_name='circuitgroupassignment',
old_name='circuit',
new_name='member',
),
migrations.AddConstraint(
model_name='circuitgroupassignment',
constraint=models.UniqueConstraint(
fields=('member', 'group'),
name='circuits_circuitgroupassignment_unique_member_group'
),
),
]

View File

@ -177,15 +177,15 @@ class CircuitGroup(OrganizationalModel):
class CircuitGroupAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLoggedModel): class CircuitGroupAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLoggedModel):
""" """
Assignment of a Circuit to a CircuitGroup with an optional priority. Assignment of a physical or virtual circuit to a CircuitGroup with an optional priority.
""" """
circuit = models.ForeignKey( member = models.ForeignKey(
Circuit, Circuit,
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='assignments' related_name='assignments'
) )
group = models.ForeignKey( group = models.ForeignKey(
CircuitGroup, to='circuits.CircuitGroup',
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='assignments' related_name='assignments'
) )
@ -197,16 +197,15 @@ class CircuitGroupAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin,
null=True null=True
) )
prerequisite_models = ( prerequisite_models = (
'circuits.Circuit',
'circuits.CircuitGroup', 'circuits.CircuitGroup',
) )
class Meta: class Meta:
ordering = ('group', 'circuit', 'priority', 'pk') ordering = ('group', 'member', 'priority', 'pk')
constraints = ( constraints = (
models.UniqueConstraint( models.UniqueConstraint(
fields=('circuit', 'group'), fields=('member', 'group'),
name='%(app_label)s_%(class)s_unique_circuit_group' name='%(app_label)s_%(class)s_unique_member_group'
), ),
) )
verbose_name = _('Circuit group assignment') verbose_name = _('Circuit group assignment')

View File

@ -188,11 +188,11 @@ class CircuitGroupAssignmentTable(NetBoxTable):
linkify=True linkify=True
) )
provider = tables.Column( provider = tables.Column(
accessor='circuit__provider', accessor='member__provider',
verbose_name=_('Provider'), verbose_name=_('Provider'),
linkify=True linkify=True
) )
circuit = tables.Column( member = tables.Column(
verbose_name=_('Circuit'), verbose_name=_('Circuit'),
linkify=True linkify=True
) )
@ -206,6 +206,6 @@ class CircuitGroupAssignmentTable(NetBoxTable):
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = CircuitGroupAssignment model = CircuitGroupAssignment
fields = ( fields = (
'pk', 'id', 'group', 'provider', 'circuit', 'priority', 'created', 'last_updated', 'actions', 'tags', 'pk', 'id', 'group', 'provider', 'member', 'priority', 'created', 'last_updated', 'actions', 'tags',
) )
default_columns = ('pk', 'group', 'provider', 'circuit', 'priority') default_columns = ('pk', 'group', 'provider', 'member', 'priority')

View File

@ -295,7 +295,7 @@ class ProviderAccountTest(APIViewTestCases.APIViewTestCase):
class CircuitGroupAssignmentTest(APIViewTestCases.APIViewTestCase): class CircuitGroupAssignmentTest(APIViewTestCases.APIViewTestCase):
model = CircuitGroupAssignment model = CircuitGroupAssignment
brief_fields = ['circuit', 'display', 'group', 'id', 'priority', 'url'] brief_fields = ['display', 'group', 'id', 'member', 'priority', 'url']
bulk_update_data = { bulk_update_data = {
'priority': CircuitPriorityChoices.PRIORITY_INACTIVE, 'priority': CircuitPriorityChoices.PRIORITY_INACTIVE,
} }
@ -330,17 +330,17 @@ class CircuitGroupAssignmentTest(APIViewTestCases.APIViewTestCase):
assignments = ( assignments = (
CircuitGroupAssignment( CircuitGroupAssignment(
group=circuit_groups[0], group=circuit_groups[0],
circuit=circuits[0], member=circuits[0],
priority=CircuitPriorityChoices.PRIORITY_PRIMARY priority=CircuitPriorityChoices.PRIORITY_PRIMARY
), ),
CircuitGroupAssignment( CircuitGroupAssignment(
group=circuit_groups[1], group=circuit_groups[1],
circuit=circuits[1], member=circuits[1],
priority=CircuitPriorityChoices.PRIORITY_SECONDARY priority=CircuitPriorityChoices.PRIORITY_SECONDARY
), ),
CircuitGroupAssignment( CircuitGroupAssignment(
group=circuit_groups[2], group=circuit_groups[2],
circuit=circuits[2], member=circuits[2],
priority=CircuitPriorityChoices.PRIORITY_TERTIARY priority=CircuitPriorityChoices.PRIORITY_TERTIARY
), ),
) )
@ -349,17 +349,17 @@ class CircuitGroupAssignmentTest(APIViewTestCases.APIViewTestCase):
cls.create_data = [ cls.create_data = [
{ {
'group': circuit_groups[3].pk, 'group': circuit_groups[3].pk,
'circuit': circuits[3].pk, 'member': circuits[3].pk,
'priority': CircuitPriorityChoices.PRIORITY_PRIMARY, 'priority': CircuitPriorityChoices.PRIORITY_PRIMARY,
}, },
{ {
'group': circuit_groups[4].pk, 'group': circuit_groups[4].pk,
'circuit': circuits[4].pk, 'member': circuits[4].pk,
'priority': CircuitPriorityChoices.PRIORITY_SECONDARY, 'priority': CircuitPriorityChoices.PRIORITY_SECONDARY,
}, },
{ {
'group': circuit_groups[5].pk, 'group': circuit_groups[5].pk,
'circuit': circuits[5].pk, 'member': circuits[5].pk,
'priority': CircuitPriorityChoices.PRIORITY_TERTIARY, 'priority': CircuitPriorityChoices.PRIORITY_TERTIARY,
}, },
] ]

View File

@ -671,17 +671,17 @@ class CircuitGroupAssignmentTestCase(TestCase, ChangeLoggedFilterSetTests):
assignments = ( assignments = (
CircuitGroupAssignment( CircuitGroupAssignment(
group=circuit_groups[0], group=circuit_groups[0],
circuit=circuits[0], member=circuits[0],
priority=CircuitPriorityChoices.PRIORITY_PRIMARY priority=CircuitPriorityChoices.PRIORITY_PRIMARY
), ),
CircuitGroupAssignment( CircuitGroupAssignment(
group=circuit_groups[1], group=circuit_groups[1],
circuit=circuits[1], member=circuits[1],
priority=CircuitPriorityChoices.PRIORITY_SECONDARY priority=CircuitPriorityChoices.PRIORITY_SECONDARY
), ),
CircuitGroupAssignment( CircuitGroupAssignment(
group=circuit_groups[2], group=circuit_groups[2],
circuit=circuits[2], member=circuits[2],
priority=CircuitPriorityChoices.PRIORITY_TERTIARY priority=CircuitPriorityChoices.PRIORITY_TERTIARY
), ),
) )
@ -694,11 +694,11 @@ class CircuitGroupAssignmentTestCase(TestCase, ChangeLoggedFilterSetTests):
params = {'group': [groups[0].slug, groups[1].slug]} params = {'group': [groups[0].slug, groups[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_circuit(self): def test_member(self):
circuits = Circuit.objects.all()[:2] circuits = Circuit.objects.all()[:2]
params = {'circuit_id': [circuits[0].pk, circuits[1].pk]} params = {'member_id': [circuits[0].pk, circuits[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'circuit': [circuits[0].cid, circuits[1].cid]} params = {'member': [circuits[0].cid, circuits[1].cid]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_provider(self): def test_provider(self):

View File

@ -497,17 +497,17 @@ class CircuitGroupAssignmentTestCase(
assignments = ( assignments = (
CircuitGroupAssignment( CircuitGroupAssignment(
group=circuit_groups[0], group=circuit_groups[0],
circuit=circuits[0], member=circuits[0],
priority=CircuitPriorityChoices.PRIORITY_PRIMARY priority=CircuitPriorityChoices.PRIORITY_PRIMARY
), ),
CircuitGroupAssignment( CircuitGroupAssignment(
group=circuit_groups[1], group=circuit_groups[1],
circuit=circuits[1], member=circuits[1],
priority=CircuitPriorityChoices.PRIORITY_SECONDARY priority=CircuitPriorityChoices.PRIORITY_SECONDARY
), ),
CircuitGroupAssignment( CircuitGroupAssignment(
group=circuit_groups[2], group=circuit_groups[2],
circuit=circuits[2], member=circuits[2],
priority=CircuitPriorityChoices.PRIORITY_TERTIARY priority=CircuitPriorityChoices.PRIORITY_TERTIARY
), ),
) )
@ -517,7 +517,7 @@ class CircuitGroupAssignmentTestCase(
cls.form_data = { cls.form_data = {
'group': circuit_groups[3].pk, 'group': circuit_groups[3].pk,
'circuit': circuits[3].pk, 'member': circuits[3].pk,
'priority': CircuitPriorityChoices.PRIORITY_INACTIVE, 'priority': CircuitPriorityChoices.PRIORITY_INACTIVE,
'tags': [t.pk for t in tags], 'tags': [t.pk for t in tags],
} }

View File

@ -22,9 +22,13 @@
<th scope="row">{% trans "Group" %}</th> <th scope="row">{% trans "Group" %}</th>
<td>{{ object.group|linkify }}</td> <td>{{ object.group|linkify }}</td>
</tr> </tr>
<tr>
<th scope="row">{% trans "Provider" %}</th>
<td>{{ object.member.provider|linkify }}</td>
</tr>
<tr> <tr>
<th scope="row">{% trans "Circuit" %}</th> <th scope="row">{% trans "Circuit" %}</th>
<td>{{ object.circuit|linkify }}</td> <td>{{ object.member|linkify }}</td>
</tr> </tr>
<tr> <tr>
<th scope="row">{% trans "Priority" %}</th> <th scope="row">{% trans "Priority" %}</th>