7025 add tenancy

This commit is contained in:
Arthur Hanson 2024-07-17 21:09:03 +07:00
parent 4f765766c1
commit 246d441fed
8 changed files with 72 additions and 21 deletions

View File

@ -306,7 +306,7 @@ class CircuitTerminationFilterSet(NetBoxModelFilterSet, CabledObjectFilterSet):
).distinct()
class CircuitGroupFilterSet(NetBoxModelFilterSet):
class CircuitGroupFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
class Meta:
model = CircuitGroup

View File

@ -14,6 +14,7 @@ from utilities.forms.widgets import BulkEditNullBooleanSelect, DatePicker, Numbe
__all__ = (
'CircuitBulkEditForm',
'CircuitGroupBulkEditForm',
'CircuitTerminationBulkEditForm',
'CircuitTypeBulkEditForm',
'ProviderBulkEditForm',
@ -219,3 +220,20 @@ class CircuitTerminationBulkEditForm(NetBoxModelBulkEditForm):
FieldSet('port_speed', 'upstream_speed', name=_('Termination Details')),
)
nullable_fields = ('description')
class CircuitGroupBulkEditForm(NetBoxModelBulkEditForm):
tenant = DynamicModelChoiceField(
label=_('Tenant'),
queryset=Tenant.objects.all(),
required=False
)
comments = CommentField()
model = CircuitGroup
fieldsets = (
FieldSet('tenant', name=_('Tenancy')),
)
nullable_fields = (
'tenant', 'comments',
)

View File

@ -154,7 +154,14 @@ class CircuitTerminationImportForm(NetBoxModelImportForm, BaseCircuitTermination
class CircuitGroupImportForm(NetBoxModelImportForm):
tenant = CSVModelChoiceField(
label=_('Tenant'),
queryset=Tenant.objects.all(),
required=False,
to_field_name='name',
help_text=_('Assigned tenant')
)
class Meta:
model = CircuitGroup
fields = ('name', 'tags')
fields = ('name', 'tenant', 'tags')

View File

@ -233,10 +233,11 @@ class CircuitTerminationFilterForm(NetBoxModelFilterSetForm):
tag = TagFilterField(model)
class CircuitGroupFilterForm(NetBoxModelFilterSetForm):
class CircuitGroupFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
model = CircuitGroup
fieldsets = (
FieldSet('q', 'filter_id', 'tag'),
FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
)
selector_fields = ('filter_id', 'q', )
tag = TagFilterField(model)

View File

@ -1,4 +1,4 @@
# Generated by Django 5.0.7 on 2024-07-16 09:18
# Generated by Django 5.0.7 on 2024-07-17 14:08
import django.db.models.deletion
import taggit.managers
@ -11,17 +11,10 @@ class Migration(migrations.Migration):
dependencies = [
('circuits', '0043_circuittype_color'),
('extras', '0118_notifications'),
('tenancy', '0015_contactassignment_rename_content_type'),
]
operations = [
migrations.CreateModel(
name='CircuitGroupAssignment',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
('priority', models.CharField(blank=True, max_length=50)),
('circuit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='circuits.circuit')),
],
),
migrations.CreateModel(
name='CircuitGroup',
fields=[
@ -36,18 +29,36 @@ class Migration(migrations.Migration):
('comments', models.TextField(blank=True)),
('name', models.CharField(max_length=100)),
('slug', models.SlugField(max_length=100)),
('circuits', models.ManyToManyField(through='circuits.CircuitGroupAssignment', to='circuits.circuit')),
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
(
'tenant',
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name='circuitgroups',
to='tenancy.tenant',
),
),
],
options={
'verbose_name': 'Circuit redundancy group',
'verbose_name_plural': 'Circuit redundancy group',
'verbose_name': 'Circuit group',
'verbose_name_plural': 'Circuit group',
'ordering': ('name', 'pk'),
},
),
migrations.CreateModel(
name='CircuitGroupAssignment',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
('priority', models.CharField(blank=True, max_length=50)),
('circuit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='circuits.circuit')),
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='circuits.circuitgroup')),
],
),
migrations.AddField(
model_name='circuitgroupassignment',
name='group',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='circuits.circuitgroup'),
model_name='circuitgroup',
name='circuits',
field=models.ManyToManyField(through='circuits.CircuitGroupAssignment', to='circuits.circuit'),
),
]

View File

@ -164,12 +164,19 @@ class CircuitGroup(PrimaryModel):
verbose_name=_('slug'),
max_length=100
)
tenant = models.ForeignKey(
to='tenancy.Tenant',
on_delete=models.PROTECT,
related_name='circuitgroups',
blank=True,
null=True
)
circuits = models.ManyToManyField(Circuit, through='CircuitGroupAssignment')
class Meta:
ordering = ('name', 'pk') # Name may be non-unique
verbose_name = _('Circuit redundancy group')
verbose_name_plural = _('Circuit redundancy group')
verbose_name = _('Circuit group')
verbose_name_plural = _('Circuit group')
def get_absolute_url(self):
return reverse('circuits:circuitgroup', args=[self.pk])

View File

@ -59,7 +59,7 @@ urlpatterns = [
path('circuit-redundancy-groups/', views.CircuitGroupListView.as_view(), name='circuitgroup_list'),
path('circuit-redundancy-groups/add/', views.CircuitGroupEditView.as_view(), name='circuitgroup_add'),
path('circuit-redundancy-groups/import/', views.CircuitGroupBulkImportView.as_view(), name='circuitgroup_import'),
# path('circuit-redundancy-groups/edit/', views.CircuitGroupBulkEditView.as_view(), name='circuitgroup_bulk_edit'),
path('circuit-redundancy-groups/edit/', views.CircuitGroupBulkEditView.as_view(), name='circuitgroup_bulk_edit'),
path('circuit-redundancy-groups/delete/', views.CircuitGroupBulkDeleteView.as_view(), name='circuitgroup_bulk_delete'),
path('circuit-redundancy-groups/<int:pk>/', include(get_model_urls('circuits', 'circuitgroup'))),
]

View File

@ -474,6 +474,13 @@ class CircuitGroupBulkImportView(generic.BulkImportView):
model_form = forms.CircuitGroupImportForm
class CircuitGroupBulkEditView(generic.BulkEditView):
queryset = CircuitGroup.objects.all()
filterset = filtersets.CircuitGroupFilterSet
table = tables.CircuitGroupTable
form = forms.CircuitGroupBulkEditForm
class CircuitGroupBulkDeleteView(generic.BulkDeleteView):
queryset = CircuitGroup.objects.all()
filterset = filtersets.CircuitGroupFilterSet