diff --git a/netbox/dcim/urls.py b/netbox/dcim/urls.py index 11ffd4458..01e470e5c 100644 --- a/netbox/dcim/urls.py +++ b/netbox/dcim/urls.py @@ -1,6 +1,6 @@ from django.urls import path -from extras.views import ImageAttachmentEditView, ObjectChangeLogView, ObjectJournalView +from extras.views import ObjectChangeLogView, ObjectJournalView from ipam.views import ServiceEditView from utilities.views import SlugRedirectView from . import views @@ -43,7 +43,6 @@ urlpatterns = [ path('sites//delete/', views.SiteDeleteView.as_view(), name='site_delete'), path('sites//changelog/', ObjectChangeLogView.as_view(), name='site_changelog', kwargs={'model': Site}), path('sites//journal/', ObjectJournalView.as_view(), name='site_journal', kwargs={'model': Site}), - path('sites//images/add/', ImageAttachmentEditView.as_view(), name='site_add_image', kwargs={'model': Site}), # Locations path('locations/', views.LocationListView.as_view(), name='location_list'), @@ -55,7 +54,6 @@ urlpatterns = [ path('locations//edit/', views.LocationEditView.as_view(), name='location_edit'), path('locations//delete/', views.LocationDeleteView.as_view(), name='location_delete'), path('locations//changelog/', ObjectChangeLogView.as_view(), name='location_changelog', kwargs={'model': Location}), - path('locations//images/add/', ImageAttachmentEditView.as_view(), name='location_add_image', kwargs={'model': Location}), # Rack roles path('rack-roles/', views.RackRoleListView.as_view(), name='rackrole_list'), @@ -92,7 +90,6 @@ urlpatterns = [ path('racks//delete/', views.RackDeleteView.as_view(), name='rack_delete'), path('racks//changelog/', ObjectChangeLogView.as_view(), name='rack_changelog', kwargs={'model': Rack}), path('racks//journal/', ObjectJournalView.as_view(), name='rack_journal', kwargs={'model': Rack}), - path('racks//images/add/', ImageAttachmentEditView.as_view(), name='rack_add_image', kwargs={'model': Rack}), # Manufacturers path('manufacturers/', views.ManufacturerListView.as_view(), name='manufacturer_list'), @@ -229,7 +226,6 @@ urlpatterns = [ path('devices//lldp-neighbors/', views.DeviceLLDPNeighborsView.as_view(), name='device_lldp_neighbors'), path('devices//config/', views.DeviceConfigView.as_view(), name='device_config'), path('devices//services/assign/', ServiceEditView.as_view(), name='device_service_assign'), - path('devices//images/add/', ImageAttachmentEditView.as_view(), name='device_add_image', kwargs={'model': Device}), # Console ports path('console-ports/', views.ConsolePortListView.as_view(), name='consoleport_list'), diff --git a/netbox/extras/urls.py b/netbox/extras/urls.py index 4dafb25f2..de8ef1531 100644 --- a/netbox/extras/urls.py +++ b/netbox/extras/urls.py @@ -78,6 +78,7 @@ urlpatterns = [ kwargs={'model': models.ConfigContext}), # Image attachments + path('image-attachments/add/', views.ImageAttachmentEditView.as_view(), name='imageattachment_add'), path('image-attachments//edit/', views.ImageAttachmentEditView.as_view(), name='imageattachment_edit'), path('image-attachments//delete/', views.ImageAttachmentDeleteView.as_view(), name='imageattachment_delete'), diff --git a/netbox/extras/views.py b/netbox/extras/views.py index b23dc0230..d39f50c79 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -472,22 +472,26 @@ class ImageAttachmentEditView(generic.ObjectEditView): queryset = ImageAttachment.objects.all() model_form = forms.ImageAttachmentForm - def alter_obj(self, imageattachment, request, args, kwargs): - if not imageattachment.pk: + def alter_obj(self, instance, request, args, kwargs): + if not instance.pk: # Assign the parent object based on URL kwargs - model = kwargs.get('model') - imageattachment.parent = get_object_or_404(model, pk=kwargs['object_id']) - return imageattachment + try: + app_label, model = request.GET.get('content_type').split('.') + except (AttributeError, ValueError): + raise Http404("Content type not specified") + content_type = get_object_or_404(ContentType, app_label=app_label, model=model) + instance.parent = get_object_or_404(content_type.model_class(), pk=request.GET.get('object_id')) + return instance - def get_return_url(self, request, imageattachment): - return imageattachment.parent.get_absolute_url() + def get_return_url(self, request, obj=None): + return obj.parent.get_absolute_url() if obj else super().get_return_url(request) class ImageAttachmentDeleteView(generic.ObjectDeleteView): queryset = ImageAttachment.objects.all() - def get_return_url(self, request, imageattachment): - return imageattachment.parent.get_absolute_url() + def get_return_url(self, request, obj=None): + return obj.parent.get_absolute_url() if obj else super().get_return_url(request) # diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index aa3f834d6..7c2359db5 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -299,7 +299,7 @@ {% if perms.extras.add_imageattachment %} {% if perms.extras.add_imageattachment %} {% if perms.extras.add_imageattachment %} {% if perms.extras.add_imageattachment %}