Django

Code

Ticket #6915 (closed: fixed)

Opened 2 years ago

Last modified 2 years ago

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

Reported by: gert@ise.co.za Assigned to: nobody
Milestone: 1.0 Component: Documentation
Version: SVN Keywords: qsrf-cleanup delete
Cc: Triage Stage: Accepted
Has patch: 0 Needs documentation: 1
Needs tests: 0 Patch needs improvement: 0

Description (Last modified by ramiro)

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

6915.naive-patch.diff (0.7 kB) - added by emulbreh on 05/28/08 15:05:38.
6915.naive-patch.2.diff (2.2 kB) - added by emulbreh on 06/04/08 07:46:52.
6915.regressiontest.diff (1.5 kB) - added by anonymous on 06/05/08 07:16:09.
6915.naive.r7787.diff (3.7 kB) - added by emulbreh on 06/29/08 16:42:21.

Change History

05/28/08 15:05:38 changed by emulbreh

  • attachment 6915.naive-patch.diff added.

05/28/08 15:07:49 changed by emulbreh

  • needs_better_patch set to 1.
  • has_patch set to 1.
  • component changed from Core framework to Database wrapper.
  • needs_tests changed.
  • needs_docs set to 1.

06/04/08 07:46:52 changed by emulbreh

  • attachment 6915.naive-patch.2.diff added.

06/05/08 07:16:09 changed by anonymous

  • attachment 6915.regressiontest.diff added.

06/08/08 18:10:12 changed by emulbreh

  • stage changed from Unreviewed to Design decision needed.

06/10/08 16:06:10 changed by anonymous

  • keywords changed from delete to qsrf-cleanup delete.

06/16/08 12:10:45 changed by jacob

  • milestone set to 1.0.

06/16/08 16:11:12 changed by ramiro

  • description changed.

06/29/08 16:42:21 changed by emulbreh

  • attachment 6915.naive.r7787.diff added.

08/15/08 10:32:59 changed by mtredinnick

  • needs_better_patch deleted.
  • has_patch deleted.
  • component changed from Database wrapper to Documentation.
  • stage changed from Design decision needed to Accepted.

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.

08/16/08 05:17:47 changed by ubernostrum

  • status changed from new to closed.
  • resolution set to fixed.

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


Add/Change #6915 (object.some_set.all().delete() does not call the delete method on some object)




Change Properties
Action