Login

Override QuerySet.delete() (one way of preventing cascading deletes)

Author:
timbroder
Posted:
January 7, 2010
Language:
Python
Version:
1.1
Tags:
queryset delete monkey-patch
Score:
0 (after 0 ratings)

We needed to override the default QuerySet delete function to deal with a client problem that we were facing

Yes This is monkey-patching, and probably bad practice but if anyone needs to conditionally override the cascading delete that django does at the application level from a queryset, this is how to do it

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from django.db.models.query import QuerySet

#save original delete method
orrigdelete = QuerySet.delete
def showdelete(self):
    #add on to delete method
    for test in self:
        if isinstance(test, YourObject):
            raise Exception('someone tried to delete your object')
            return  
        else:
            break   
    #call original delete
    return orrigdelete(self)

#set the queryset delete as our new method
QuerySet.delete = showdelete

More like this

  1. Clear nullable foreign keys on delete by psagers 6 years, 4 months ago
  2. Middleware for using HttpOnly session cookie (including monkey patching for support for Python <2.6) by chrj 4 years, 11 months ago
  3. Find deletable objects by writefaruq 3 years, 10 months ago
  4. Monkey-patch Django's test client to return WSGIRequest objects by robmadole 4 years, 5 months ago
  5. PostgreSQL ON DELETE CASCADE by mjt 5 years, 5 months ago

Comments

Please login first before commenting.