Skip to content

Commit 78f741f

Browse files
committed
Closes netbox-community#15794: Make "related objects" dynamic
Instead of hardcoding relationships between models for the detail view, they are now dynamically generated.
1 parent 85db007 commit 78f741f

File tree

9 files changed

+151
-222
lines changed

9 files changed

+151
-222
lines changed

netbox/circuits/views.py

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from tenancy.views import ObjectContactsView
88
from utilities.forms import ConfirmationForm
99
from utilities.utils import count_related
10-
from utilities.views import register_model_view
10+
from utilities.views import GetRelatedModelsMixin, register_model_view
1111
from . import filtersets, forms, tables
1212
from .models import *
1313

@@ -26,17 +26,12 @@ class ProviderListView(generic.ObjectListView):
2626

2727

2828
@register_model_view(Provider)
29-
class ProviderView(generic.ObjectView):
29+
class ProviderView(GetRelatedModelsMixin, generic.ObjectView):
3030
queryset = Provider.objects.all()
3131

3232
def get_extra_context(self, request, instance):
33-
related_models = (
34-
(ProviderAccount.objects.restrict(request.user, 'view').filter(provider=instance), 'provider_id'),
35-
(Circuit.objects.restrict(request.user, 'view').filter(provider=instance), 'provider_id'),
36-
)
37-
3833
return {
39-
'related_models': related_models,
34+
'related_models': self.get_related_models(request, instance),
4035
}
4136

4237

@@ -92,16 +87,12 @@ class ProviderAccountListView(generic.ObjectListView):
9287

9388

9489
@register_model_view(ProviderAccount)
95-
class ProviderAccountView(generic.ObjectView):
90+
class ProviderAccountView(GetRelatedModelsMixin, generic.ObjectView):
9691
queryset = ProviderAccount.objects.all()
9792

9893
def get_extra_context(self, request, instance):
99-
related_models = (
100-
(Circuit.objects.restrict(request.user, 'view').filter(provider_account=instance), 'provider_account_id'),
101-
)
102-
10394
return {
104-
'related_models': related_models,
95+
'related_models': self.get_related_models(request, instance),
10596
}
10697

10798

@@ -156,19 +147,20 @@ class ProviderNetworkListView(generic.ObjectListView):
156147

157148

158149
@register_model_view(ProviderNetwork)
159-
class ProviderNetworkView(generic.ObjectView):
150+
class ProviderNetworkView(GetRelatedModelsMixin, generic.ObjectView):
160151
queryset = ProviderNetwork.objects.all()
161152

162-
def get_extra_context(self, request, instance):
163-
related_models = (
153+
def get_extra_related_models(self, request, instance):
154+
return (
164155
(
165156
Circuit.objects.restrict(request.user, 'view').filter(terminations__provider_network=instance),
166157
'provider_network_id',
167158
),
168159
)
169160

161+
def get_extra_context(self, request, instance):
170162
return {
171-
'related_models': related_models,
163+
'related_models': self.get_related_models(request, instance, [CircuitTermination]),
172164
}
173165

174166

@@ -215,16 +207,12 @@ class CircuitTypeListView(generic.ObjectListView):
215207

216208

217209
@register_model_view(CircuitType)
218-
class CircuitTypeView(generic.ObjectView):
210+
class CircuitTypeView(GetRelatedModelsMixin, generic.ObjectView):
219211
queryset = CircuitType.objects.all()
220212

221213
def get_extra_context(self, request, instance):
222-
related_models = (
223-
(Circuit.objects.restrict(request.user, 'view').filter(type=instance), 'type_id'),
224-
)
225-
226214
return {
227-
'related_models': related_models,
215+
'related_models': self.get_related_models(request, instance),
228216
}
229217

230218

netbox/core/views.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from netbox.views import generic
99
from netbox.views.generic.base import BaseObjectView
1010
from utilities.utils import count_related
11-
from utilities.views import ContentTypePermissionRequiredMixin, register_model_view
11+
from utilities.views import ContentTypePermissionRequiredMixin, GetRelatedModelsMixin, register_model_view
1212
from . import filtersets, forms, tables
1313
from .models import *
1414

@@ -27,16 +27,12 @@ class DataSourceListView(generic.ObjectListView):
2727

2828

2929
@register_model_view(DataSource)
30-
class DataSourceView(generic.ObjectView):
30+
class DataSourceView(GetRelatedModelsMixin, generic.ObjectView):
3131
queryset = DataSource.objects.all()
3232

3333
def get_extra_context(self, request, instance):
34-
related_models = (
35-
(DataFile.objects.restrict(request.user, 'view').filter(source=instance), 'source_id'),
36-
)
37-
3834
return {
39-
'related_models': related_models,
35+
'related_models': self.get_related_models(request, instance),
4036
}
4137

4238

0 commit comments

Comments
 (0)