docs: def __get_is_revertible(self):
          """Return a boolean representing whether this Action is revertible
          or not"""
  
          # If it was already reverted
          if self.reverted:
              return False
  
          errors = []
          inst = self.timemachine
          
          if inst.fields != inst.presently.fields or \
             inst.foreignkeys != inst.presently.foreignkeys:
             self.__undo_errors = [
                 "Cannot undo action %s. The database schema"
                 " for %s has changed"
                  % (self.id,
                     inst.content_type.name,)]
             return False
  
  
          if self.action_type in ["dl", "md"]:
              # If undoing deletion, make sure it actually doesn't exist
              if self.action_type == "dl" and inst.presently.exists:
                  errors.append(
                      "Cannot undo action %d: the %s you are trying to"
                      " recreate already exists"
                      % (self.id,
                         inst.content_type.name,))
              # The only problem we can have by reversing this action
              # is that some of its foreignkeys could be pointing to
              # objects that have since been deleted.
              check_here = inst.at_previous_action
              for field in inst.foreignkeys:
                  fk = check_here.get_timemachine_instance(field)
                  # If the ForeignKey doesn't have a value
                  if not fk: continue
                  if not fk.exists:
                      errors.append(
                          "Cannot undo action %s: the %s used to link to"
                          " a %s that has since been deleted"
                          % (self.id,
                             inst.content_type.name,
                             fk.content_type.name,))
  
          else: # self.action_type == "cr"
              # Make sure it actually exists
              if not self.timemachine.presently.exists:
                  errors.append(
                      "Cannot undo action %s: the %s you are trying"
                      " to delete doesn't currently exist"
                      % (self.id, inst.content_type.name,))
              # The only problem we can have by undoing this action is
              # that it could have foreignkeys pointed to it, so deleting
              # it will cause deletion of other objects
              else:
                  links = [rel.get_accessor_name() 
                           for rel in \
                           inst.get_object()._meta.get_all_related_objects()]
                  for link in links:
                      objects = getattr(inst.get_object(), link).all()
                      for rel in objects:
                          errors.append(
                             "Cannot undo action %s: you are trying to"
                             " delete a %s that has a %s pointing to it" %
                             (self.id, 
                              inst.content_type.name,
                              ContentType.objects.get_for_model(rel.__class__),))
  
          self.__undo_errors = errors
          return (len(errors) == 0)