Skip to content

Commit

Permalink
Delete method now softdeletep's all FK related objects
Browse files Browse the repository at this point in the history
  • Loading branch information
Cangiani Agustín committed Nov 28, 2013
1 parent 41b07d2 commit 31f1684
Showing 1 changed file with 28 additions and 8 deletions.
36 changes: 28 additions & 8 deletions logicaldelete/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,40 @@ class Model(models.Model):
This base model provides date fields and functionality to enable logical
delete functionality in derived models.
"""
date_created = models.DateTimeField(default=datetime.datetime.now)

date_created = models.DateTimeField(default=datetime.datetime.now)
date_modified = models.DateTimeField(default=datetime.datetime.now)
date_removed = models.DateTimeField(null=True, blank=True)
date_removed = models.DateTimeField(null=True, blank=True)

objects = managers.LogicalDeletedManager()

def active(self):
return self.date_removed == None
active.boolean = True

def delete(self):
self.date_removed = datetime.datetime.now()
'''
Soft delete all fk related objects that
inherit from logicaldelete class
'''

# Fetch related models
related_objs = [relation.get_accessor_name() for
relation in self._meta.get_all_related_objects()]

for objs_model in related_objs:
# Retrieve all related objects
objs = getattr(self, objs_model).all()

for obj in objs:
# Checking if inherits from logicaldelete
if not issubclass(obj.__class__, Model):
break
obj.delete()

# Soft delete the object
self.date_removed = timezone.now()
self.save()

class Meta:
abstract = True

0 comments on commit 31f1684

Please sign in to comment.