Can not add image to device type #8658

Closed
opened 2025-12-29 20:39:29 +01:00 by adam · 5 comments
Owner

Originally created by @whtkam on GitHub (Sep 21, 2023).

Originally assigned to: @arthanson on GitHub.

NetBox version

v3.6.2

Python version

3.8

Steps to Reproduce

  1. create new device-type
  2. add image to Front image
  3. save

Expected Behavior

save image to device-type

Observed Behavior

<class 'AttributeError'>

'str' object has no attribute 'delete'

Python version: 3.8.10
NetBox version: 3.6.2
Plugins:
netbox_demo: 0.3.1

Originally created by @whtkam on GitHub (Sep 21, 2023). Originally assigned to: @arthanson on GitHub. ### NetBox version v3.6.2 ### Python version 3.8 ### Steps to Reproduce 1. create new device-type 2. add image to Front image 3. save ### Expected Behavior save image to device-type ### Observed Behavior <class 'AttributeError'> 'str' object has no attribute 'delete' Python version: 3.8.10 NetBox version: 3.6.2 Plugins: netbox_demo: 0.3.1
adam added the type: bugstatus: acceptedseverity: medium labels 2025-12-29 20:39:29 +01:00
adam closed this issue 2025-12-29 20:39:30 +01:00
Author
Owner

@Azmodeszer commented on GitHub (Sep 21, 2023):

Can confirm.

Python version: 3.9.2
NetBox version: 3.6.2

@Azmodeszer commented on GitHub (Sep 21, 2023): Can confirm. Python version: 3.9.2 NetBox version: 3.6.2
Author
Owner

@jeremystretch commented on GitHub (Sep 21, 2023):

@arthanson can you look into this please? Seems we need to update the logic for deleting the old front/rear images under save().

Traceback (most recent call last):
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 104, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/jstretch/projects/netbox/netbox/netbox/views/generic/object_views.py", line 170, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/jstretch/projects/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/jstretch/projects/netbox/netbox/utilities/views.py", line 99, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 143, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/jstretch/projects/netbox/netbox/netbox/views/generic/object_views.py", line 264, in post
    obj = form.save()
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/forms/models.py", line 542, in save
    self.instance.save()
  File "/home/jstretch/projects/netbox/netbox/dcim/models/devices.py", line 336, in save
    self._original_front_image.delete(save=False)

Exception Type: AttributeError at /dcim/device-types/11/edit/
Exception Value: 'str' object has no attribute 'delete'
@jeremystretch commented on GitHub (Sep 21, 2023): @arthanson can you look into this please? Seems we need to update the logic for deleting the old front/rear images under `save()`. ``` Traceback (most recent call last): File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 104, in view return self.dispatch(request, *args, **kwargs) File "/home/jstretch/projects/netbox/netbox/netbox/views/generic/object_views.py", line 170, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/jstretch/projects/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/jstretch/projects/netbox/netbox/utilities/views.py", line 99, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 143, in dispatch return handler(request, *args, **kwargs) File "/home/jstretch/projects/netbox/netbox/netbox/views/generic/object_views.py", line 264, in post obj = form.save() File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/forms/models.py", line 542, in save self.instance.save() File "/home/jstretch/projects/netbox/netbox/dcim/models/devices.py", line 336, in save self._original_front_image.delete(save=False) Exception Type: AttributeError at /dcim/device-types/11/edit/ Exception Value: 'str' object has no attribute 'delete' ```
Author
Owner

@leandrosly commented on GitHub (Sep 21, 2023):

Confirmed.

<class 'AttributeError'>

'str' object has no attribute 'delete'

Python version: 3.8.10
NetBox version: 3.6.2
Plugins: None installed

@leandrosly commented on GitHub (Sep 21, 2023): Confirmed. <class 'AttributeError'> 'str' object has no attribute 'delete' Python version: 3.8.10 NetBox version: 3.6.2 Plugins: None installed
Author
Owner

@leandrosly commented on GitHub (Sep 21, 2023):

Definitely not a solution but i tried commenting lines 335 to 338 in /opt/netbox/netbox/dcim/models/devices.py and was able to upload the image.

def save(self, *args, **kwargs):
    ret = super().save(*args, **kwargs)

    # Delete any previously uploaded image files that are no longer in use
    #if self.front_image != self._original_front_image:
    #    self._original_front_image.delete(save=False)
    #if self.rear_image != self._original_rear_image:
    #    self._original_rear_image.delete(save=False)

    return ret
@leandrosly commented on GitHub (Sep 21, 2023): Definitely not a solution but i tried commenting lines 335 to 338 in /opt/netbox/netbox/dcim/models/devices.py and was able to upload the image. def save(self, *args, **kwargs): ret = super().save(*args, **kwargs) # Delete any previously uploaded image files that are no longer in use #if self.front_image != self._original_front_image: # self._original_front_image.delete(save=False) #if self.rear_image != self._original_rear_image: # self._original_rear_image.delete(save=False) return ret
Author
Owner

@mike548141 commented on GitHub (Sep 22, 2023):

I see there is a PR to fix this, thank you. In case its helpful I can reproduce this bug on my docker install, the exception message is
`<class 'AttributeError'>

'str' object has no attribute 'delete'

Python version: 3.11.4
NetBox version: 3.6.2
Plugins: None installed`

@mike548141 commented on GitHub (Sep 22, 2023): I see there is a PR to fix this, thank you. In case its helpful I can reproduce this bug on my docker install, the exception message is `<class 'AttributeError'> 'str' object has no attribute 'delete' Python version: 3.11.4 NetBox version: 3.6.2 Plugins: None installed`
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#8658