Opened 17 years ago

Closed 16 years ago

Last modified 13 years ago

#6915 closed (fixed)

object.some_set.all().delete() does not call the delete method on some object

Reported by: gert@… Owned by: nobody
Component: Documentation Version: dev
Severity: Keywords: qsrf-cleanup delete
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: yes
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Ramiro Morales)

If you override an objects delete method:

object.something_set.all().delete()

does not do the same as:

for something in object.something_set.all():
    something.delete()

The new delete method is never called and hence any associated cleanup or audit code are never called. This comes to light when you delete an object which in turn deletes related objects.

Attachments (4)

6915.naive-patch.diff (755 bytes ) - added by Johannes Dollinger 16 years ago.
6915.naive-patch.2.diff (2.2 KB ) - added by Johannes Dollinger 16 years ago.
6915.regressiontest.diff (1.5 KB ) - added by anonymous 16 years ago.
6915.naive.r7787.diff (3.7 KB ) - added by Johannes Dollinger 16 years ago.

Download all attachments as: .zip

Change History (12)

by Johannes Dollinger, 16 years ago

Attachment: 6915.naive-patch.diff added

comment:1 by Johannes Dollinger, 16 years ago

Component: Core frameworkDatabase wrapper
Has patch: set
Needs documentation: set
Patch needs improvement: set

by Johannes Dollinger, 16 years ago

Attachment: 6915.naive-patch.2.diff added

by anonymous, 16 years ago

Attachment: 6915.regressiontest.diff added

comment:2 by Johannes Dollinger, 16 years ago

Triage Stage: UnreviewedDesign decision needed

comment:3 by anonymous, 16 years ago

Keywords: qsrf-cleanup added

comment:4 by Jacob, 16 years ago

milestone: 1.0

comment:5 by Ramiro Morales, 16 years ago

Description: modified (diff)

by Johannes Dollinger, 16 years ago

Attachment: 6915.naive.r7787.diff added

comment:6 by Malcolm Tredinnick, 16 years ago

Component: Database wrapperDocumentation
Has patch: unset
Patch needs improvement: unset
Triage Stage: Design decision neededAccepted

This is only open until I (or somebody else) writes a documentation patch. The delete() method is primarily a mass-SQL operation, just like update(). However, because I suspect we sometimes do call delete() on some of the auxilliary objects, I'd like to try and document when that happens in case somebody does write a custom method. Really, though, there shouldn't be many custom delete() methods. Performing secondary actions for a delete is better done via post-delete signal handlers. Calling the delete() method on every object that has one will just slow things down.

So the resolution here is a docs patch, nothing more.

comment:7 by James Bennett, 16 years ago

Resolution: fixed
Status: newclosed

(In [8406]) Fixed #6915: Documented the fact that QuerySet.delete() may not call delete() methods of individual objects

comment:8 by Jacob, 13 years ago

milestone: 1.0

Milestone 1.0 deleted

Note: See TracTickets for help on using tickets.
Back to Top