﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
32845	Names of uploaded files cannot be modified.	Jacob Fredericksen	nobody	"According to the Django docs (https://docs.djangoproject.com/en/3.2/topics/files/), I should be able to update the name of an uploaded file like so:

{{{
import os
from django.conf import settings
initial_path = car.photo.path
car.photo.name = 'cars/chevy_ii.jpg'
new_path = settings.MEDIA_ROOT + car.photo.name
# Move the file on the filesystem
os.rename(initial_path, new_path)
car.save()
car.photo.path
'/media/cars/chevy_ii.jpg'
car.photo.path == new_path
True
}}}


This does not work.

Here is the script I used to test:

{{{
            ...
            initial_filepath = model_instance.file.path
            new_filename = 'sources/new_filename.pdf
            new_filepath = os.path.join(settings.MEDIA_ROOT, new_filename)
            # Verify the initial filepath exists and the new filepath does not yet exist.
            assert os.path.exists(initial_filepath)
            if os.path.exists(new_filepath):
                raise Exception(f'{new_filepath} already exists.')
            print(
                f'{model_instance.file.name} ---> {new_filename}\n'
                f'{initial_filepath} ---> {new_filepath} '
            )

            # Rename the file.
            f.file.name = new_filename
            os.rename(initial_filepath, new_filepath)
            sleep(5)

            # Verify the file was renamed successfully.
            assert os.path.exists(new_filepath)
            assert not os.path.exists(initial_filepath)
            assert model_instance.file.name == new_filename

            input('Continue? ')

            # Save the model instance.
            model_instance.save()
            model_instance.refresh_from_db()

            # Verify the file was renamed successfully.
            assert model_instance.file.path == new_filepath, f'{model_instance.file.path} != {new_filepath}'
}}}


Result:

{{{
sources/old_filename.pdf ---> sources/new_filename.pdf
/project/media/sources/old_filename.pdf ---> /project/media/sources/new_filename.pdf 
Continue? 
Traceback (most recent call last):
  File ""/project/my_script.py"", line 108, in <module>
    assert model_instance.file.path == new_filepath, f'{model_instance.file.path} != {new_filepath}'
AssertionError: /project/media/sources/old_filename.pdf != /project/media/sources/new_filename.pdf
}}}

I watched the file name (in my file browser) as the script ran. The file name is successfully changed (as demonstrated by the successful assertions above), but it is then reverted to the original file name when the model instance is saved."	Bug	closed	File uploads/storage	3.2	Normal	invalid			Unreviewed	0	0	0	0	0	0
