'Delete this instance.
By default, a soft-delete is performed, only hiding the instance from
the custom manager methods without actually removing it from the
database. pre_delete and post_delete signals are *not* sent in that
case. The slug will be set to None during the process.
Can be overridden by passing `hard_delete=True` keyword argument, in
which case it behaves like a regular delete() call instead.'

def delete(self, *args, **kwargs):

    if self.is_blocked():
        raise BlockedExtensionError
    hard_delete = kwargs.pop('hard_delete', False)
    if hard_delete:
        return super(Extension, self).delete(*args, **kwargs)
    self.update(deleted=True, slug=None)
