Login

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

Author:
timbroder
Posted:
January 7, 2010
Language:
Python
Version:
1.1
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. Template tag - list punctuation for a list of items by shapiromatron 2 months, 2 weeks ago
  2. JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 2 months, 3 weeks ago
  3. Serializer factory with Django Rest Framework by julio 9 months, 2 weeks ago
  4. Image compression before saving the new model / work with JPG, PNG by Schleidens 10 months, 1 week ago
  5. Help text hyperlinks by sa2812 11 months ago

Comments

Please login first before commenting.