mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-08 08:38:16 -06:00
7025 add tenancy
This commit is contained in:
parent
4f765766c1
commit
246d441fed
@ -306,7 +306,7 @@ class CircuitTerminationFilterSet(NetBoxModelFilterSet, CabledObjectFilterSet):
|
|||||||
).distinct()
|
).distinct()
|
||||||
|
|
||||||
|
|
||||||
class CircuitGroupFilterSet(NetBoxModelFilterSet):
|
class CircuitGroupFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CircuitGroup
|
model = CircuitGroup
|
||||||
|
@ -14,6 +14,7 @@ from utilities.forms.widgets import BulkEditNullBooleanSelect, DatePicker, Numbe
|
|||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'CircuitBulkEditForm',
|
'CircuitBulkEditForm',
|
||||||
|
'CircuitGroupBulkEditForm',
|
||||||
'CircuitTerminationBulkEditForm',
|
'CircuitTerminationBulkEditForm',
|
||||||
'CircuitTypeBulkEditForm',
|
'CircuitTypeBulkEditForm',
|
||||||
'ProviderBulkEditForm',
|
'ProviderBulkEditForm',
|
||||||
@ -219,3 +220,20 @@ class CircuitTerminationBulkEditForm(NetBoxModelBulkEditForm):
|
|||||||
FieldSet('port_speed', 'upstream_speed', name=_('Termination Details')),
|
FieldSet('port_speed', 'upstream_speed', name=_('Termination Details')),
|
||||||
)
|
)
|
||||||
nullable_fields = ('description')
|
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',
|
||||||
|
)
|
||||||
|
@ -154,7 +154,14 @@ class CircuitTerminationImportForm(NetBoxModelImportForm, BaseCircuitTermination
|
|||||||
|
|
||||||
|
|
||||||
class CircuitGroupImportForm(NetBoxModelImportForm):
|
class CircuitGroupImportForm(NetBoxModelImportForm):
|
||||||
|
tenant = CSVModelChoiceField(
|
||||||
|
label=_('Tenant'),
|
||||||
|
queryset=Tenant.objects.all(),
|
||||||
|
required=False,
|
||||||
|
to_field_name='name',
|
||||||
|
help_text=_('Assigned tenant')
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CircuitGroup
|
model = CircuitGroup
|
||||||
fields = ('name', 'tags')
|
fields = ('name', 'tenant', 'tags')
|
||||||
|
@ -233,10 +233,11 @@ class CircuitTerminationFilterForm(NetBoxModelFilterSetForm):
|
|||||||
tag = TagFilterField(model)
|
tag = TagFilterField(model)
|
||||||
|
|
||||||
|
|
||||||
class CircuitGroupFilterForm(NetBoxModelFilterSetForm):
|
class CircuitGroupFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
||||||
model = CircuitGroup
|
model = CircuitGroup
|
||||||
fieldsets = (
|
fieldsets = (
|
||||||
FieldSet('q', 'filter_id', 'tag'),
|
FieldSet('q', 'filter_id', 'tag'),
|
||||||
|
FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
|
||||||
)
|
)
|
||||||
selector_fields = ('filter_id', 'q', )
|
selector_fields = ('filter_id', 'q', )
|
||||||
tag = TagFilterField(model)
|
tag = TagFilterField(model)
|
||||||
|
@ -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 django.db.models.deletion
|
||||||
import taggit.managers
|
import taggit.managers
|
||||||
@ -11,17 +11,10 @@ class Migration(migrations.Migration):
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
('circuits', '0043_circuittype_color'),
|
('circuits', '0043_circuittype_color'),
|
||||||
('extras', '0118_notifications'),
|
('extras', '0118_notifications'),
|
||||||
|
('tenancy', '0015_contactassignment_rename_content_type'),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
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(
|
migrations.CreateModel(
|
||||||
name='CircuitGroup',
|
name='CircuitGroup',
|
||||||
fields=[
|
fields=[
|
||||||
@ -36,18 +29,36 @@ class Migration(migrations.Migration):
|
|||||||
('comments', models.TextField(blank=True)),
|
('comments', models.TextField(blank=True)),
|
||||||
('name', models.CharField(max_length=100)),
|
('name', models.CharField(max_length=100)),
|
||||||
('slug', models.SlugField(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')),
|
('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={
|
options={
|
||||||
'verbose_name': 'Circuit redundancy group',
|
'verbose_name': 'Circuit group',
|
||||||
'verbose_name_plural': 'Circuit redundancy group',
|
'verbose_name_plural': 'Circuit group',
|
||||||
'ordering': ('name', 'pk'),
|
'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(
|
migrations.AddField(
|
||||||
model_name='circuitgroupassignment',
|
model_name='circuitgroup',
|
||||||
name='group',
|
name='circuits',
|
||||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='circuits.circuitgroup'),
|
field=models.ManyToManyField(through='circuits.CircuitGroupAssignment', to='circuits.circuit'),
|
||||||
),
|
),
|
||||||
]
|
]
|
@ -164,12 +164,19 @@ class CircuitGroup(PrimaryModel):
|
|||||||
verbose_name=_('slug'),
|
verbose_name=_('slug'),
|
||||||
max_length=100
|
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')
|
circuits = models.ManyToManyField(Circuit, through='CircuitGroupAssignment')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ('name', 'pk') # Name may be non-unique
|
ordering = ('name', 'pk') # Name may be non-unique
|
||||||
verbose_name = _('Circuit redundancy group')
|
verbose_name = _('Circuit group')
|
||||||
verbose_name_plural = _('Circuit redundancy group')
|
verbose_name_plural = _('Circuit group')
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse('circuits:circuitgroup', args=[self.pk])
|
return reverse('circuits:circuitgroup', args=[self.pk])
|
||||||
|
@ -59,7 +59,7 @@ urlpatterns = [
|
|||||||
path('circuit-redundancy-groups/', views.CircuitGroupListView.as_view(), name='circuitgroup_list'),
|
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/add/', views.CircuitGroupEditView.as_view(), name='circuitgroup_add'),
|
||||||
path('circuit-redundancy-groups/import/', views.CircuitGroupBulkImportView.as_view(), name='circuitgroup_import'),
|
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/delete/', views.CircuitGroupBulkDeleteView.as_view(), name='circuitgroup_bulk_delete'),
|
||||||
path('circuit-redundancy-groups/<int:pk>/', include(get_model_urls('circuits', 'circuitgroup'))),
|
path('circuit-redundancy-groups/<int:pk>/', include(get_model_urls('circuits', 'circuitgroup'))),
|
||||||
]
|
]
|
||||||
|
@ -474,6 +474,13 @@ class CircuitGroupBulkImportView(generic.BulkImportView):
|
|||||||
model_form = forms.CircuitGroupImportForm
|
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):
|
class CircuitGroupBulkDeleteView(generic.BulkDeleteView):
|
||||||
queryset = CircuitGroup.objects.all()
|
queryset = CircuitGroup.objects.all()
|
||||||
filterset = filtersets.CircuitGroupFilterSet
|
filterset = filtersets.CircuitGroupFilterSet
|
||||||
|
Loading…
Reference in New Issue
Block a user