Would it be easy to have a pre_change_file and post_change_file signal
pair, fired during the point in saving an instance when the files are
really written? Its args would be something like the following:
{{{
sender, instance, field_name, old_path, new_path, **kwargs
}}}
where old_path is None if the file is being saved for the first time, and
new_path is None if the file is being deleted (in other words, replaced
with no file).
As well as enabling app-specific decisions to be me made about deleting
old files, this would also be a hook to hang the recalculation of
ImageField width and height attributes that would avoid recalculating them
needlessly.
--
Ticket URL: <https://code.djangoproject.com/ticket/20355>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0
Comment:
Can't you use pre_save and get the just to-be-saved model from the DB?
Then you can compare old path against new path.
--
Ticket URL: <https://code.djangoproject.com/ticket/20355#comment:1>
Comment (by akaariai):
Note that deleting the file on the moment the change happens isn't safe.
What if a rollback happens? Even at rollback time this isn't safe - there
is still the possibility there are other transactions open seeing the old
file, but at least that is a temporary error state.
So, I think queuing the file deletes on transaction.commit is needed,
otherwise this is a very dangerous thing to do. So, I am marking this as
wontfix, we can revisit this once transaction.post_commit hook is
available...
--
Ticket URL: <https://code.djangoproject.com/ticket/20355#comment:2>
* status: new => closed
* resolution: => wontfix
--
Ticket URL: <https://code.djangoproject.com/ticket/20355#comment:3>