#29398: Cascade deletion doesn't invoke .delete() on the cascaded objects
-----------------------------------------+--------------------------------
Reporter: Daniel Quinn | Owner: nobody
Type: Uncategorized | Status: new
Component: Uncategorized | Version: 1.11
Severity: Normal | Keywords: delete cascade
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-----------------------------------------+--------------------------------
I understand that when using `.delete()` on a queryset, the object(s) in
question won't have their `.delete()` method executed. However, if you're
explicitly calling `.delete()` on an object, I would expect that this
would in turn call `.delete()` on any cascaded objects as well, and this
appears not to be the case. Some example code for illustration:
{{{
class User(models.Model):
name = models.Charfield(max_length=16)
def delete(self, *args, **kwargs):
print("This is executed")
super().delete(*args, **kwargs)
class Business(models.Model):
user = models.ForeignKey(User)
def delete(self, *args, **kwargs):
print("This isn't executed :-(")
super().delete(*args, **kwargs)
# This will run User.delete() and delete the associated business, but
*not* execute Business.delete()
User.objects.first().delete()
}}}
It's unclear whether this is a bug or intentional, but I didn't see
anything about this in the documentation and it surprised me today, so I
thought I would mention it. I generally don't like signals (too much
magic) but is that the preferred method for handling deletion special
cases?
--
Ticket URL: <https://code.djangoproject.com/ticket/29398>
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].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/054.066434127721320d5ce507707701a09b%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.