#20355: How about pre/post_change_file signals to allow apps to delete replaced
files?
--------------------------------------+--------------------
Reporter: pdc@… | Owner: nobody
Type: New feature | Status: new
Component: File uploads/storage | Version: 1.5
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
--------------------------------------+--------------------
Some people are surprised to discover that saving a new file to a
FileField does not delete the old file, and deleting a model instance does
not delete its dependent files. This is for a good reason of course—I may
know that user avatars are disposable, say, but Django does not. But if
the app does know whether old files can e disposed of, there does not seem
to be an easy way to achieve this systematically because in pre_save and
post_save signal handlers we do not have acces to both the old and new
path names.
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.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.