1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Migrate all ObjectView subclasses to use get_extra_context()

This commit is contained in:
Jeremy Stretch
2020-11-19 15:59:11 -05:00
parent d237b97776
commit 1d922ee813
10 changed files with 284 additions and 380 deletions

View File

@@ -83,21 +83,7 @@ class ConfigContextListView(generic.ObjectListView):
class ConfigContextView(generic.ObjectView):
queryset = ConfigContext.objects.all()
def get(self, request, pk):
# Extend queryset to prefetch related objects
self.queryset = self.queryset.prefetch_related(
Prefetch('regions', queryset=Region.objects.restrict(request.user)),
Prefetch('sites', queryset=Site.objects.restrict(request.user)),
Prefetch('roles', queryset=DeviceRole.objects.restrict(request.user)),
Prefetch('platforms', queryset=Platform.objects.restrict(request.user)),
Prefetch('clusters', queryset=Cluster.objects.restrict(request.user)),
Prefetch('cluster_groups', queryset=ClusterGroup.objects.restrict(request.user)),
Prefetch('tenants', queryset=Tenant.objects.restrict(request.user)),
Prefetch('tenant_groups', queryset=TenantGroup.objects.restrict(request.user)),
)
configcontext = get_object_or_404(self.queryset, pk=pk)
def get_extra_context(self, request, instance):
# Determine user's preferred output format
if request.GET.get('format') in ['json', 'yaml']:
format = request.GET.get('format')
@@ -108,10 +94,9 @@ class ConfigContextView(generic.ObjectView):
else:
format = 'json'
return render(request, 'extras/configcontext.html', {
'object': configcontext,
return {
'format': format,
})
}
class ConfigContextEditView(generic.ObjectEditView):
@@ -138,12 +123,10 @@ class ConfigContextBulkDeleteView(generic.BulkDeleteView):
class ObjectConfigContextView(generic.ObjectView):
base_template = None
template_name = 'extras/object_configcontext.html'
def get(self, request, pk):
obj = get_object_or_404(self.queryset, pk=pk)
source_contexts = ConfigContext.objects.restrict(request.user, 'view').get_for_object(obj)
model_name = self.queryset.model._meta.model_name
def get_extra_context(self, request, instance):
source_contexts = ConfigContext.objects.restrict(request.user, 'view').get_for_object(instance)
# Determine user's preferred output format
if request.GET.get('format') in ['json', 'yaml']:
@@ -155,14 +138,13 @@ class ObjectConfigContextView(generic.ObjectView):
else:
format = 'json'
return render(request, 'extras/object_configcontext.html', {
'object': obj,
'rendered_context': obj.get_config_context(),
return {
'rendered_context': instance.get_config_context(),
'source_contexts': source_contexts,
'format': format,
'base_template': self.base_template,
'active_tab': 'config-context',
})
}
#
@@ -181,14 +163,11 @@ class ObjectChangeListView(generic.ObjectListView):
class ObjectChangeView(generic.ObjectView):
queryset = ObjectChange.objects.all()
def get(self, request, pk):
objectchange = get_object_or_404(self.queryset, pk=pk)
def get_extra_context(self, request, instance):
related_changes = ObjectChange.objects.restrict(request.user, 'view').filter(
request_id=objectchange.request_id
request_id=instance.request_id
).exclude(
pk=objectchange.pk
pk=instance.pk
)
related_changes_table = tables.ObjectChangeTable(
data=related_changes[:50],
@@ -196,33 +175,32 @@ class ObjectChangeView(generic.ObjectView):
)
objectchanges = ObjectChange.objects.restrict(request.user, 'view').filter(
changed_object_type=objectchange.changed_object_type,
changed_object_id=objectchange.changed_object_id,
changed_object_type=instance.changed_object_type,
changed_object_id=instance.changed_object_id,
)
next_change = objectchanges.filter(time__gt=objectchange.time).order_by('time').first()
prev_change = objectchanges.filter(time__lt=objectchange.time).order_by('-time').first()
next_change = objectchanges.filter(time__gt=instance.time).order_by('time').first()
prev_change = objectchanges.filter(time__lt=instance.time).order_by('-time').first()
if prev_change:
diff_added = shallow_compare_dict(
prev_change.object_data,
objectchange.object_data,
instance.object_data,
exclude=['last_updated'],
)
diff_removed = {x: prev_change.object_data.get(x) for x in diff_added}
else:
# No previous change; this is the initial change that added the object
diff_added = diff_removed = objectchange.object_data
diff_added = diff_removed = instance.object_data
return render(request, 'extras/objectchange.html', {
'object': objectchange,
return {
'diff_added': diff_added,
'diff_removed': diff_removed,
'next_change': next_change,
'prev_change': prev_change,
'related_changes_table': related_changes_table,
'related_changes_count': related_changes.count()
})
}
class ObjectChangeLogView(View):