'Removes permission ``perm`` for an instance ``obj`` and given ``user_or_group``.
Please note that we do NOT fetch object permission from database - we
use ``Queryset.delete`` method for removing it. Main implication of this
is that ``post_delete`` signals would NOT be fired.'

def remove_perm(self, perm, user_or_group, obj):

    if (getattr(obj, u'pk', None) is None):
        raise ObjectNotPersisted((u'Object    %s    needs    to    be    persisted    first' % obj))
    filters = Q(**{self.user_or_group_field: user_or_group})
    if isinstance(perm, Permission):
        filters &= Q(permission=perm)
    else:
        filters &= Q(permission__codename=perm, permission__content_type=get_content_type(obj))
    if self.is_generic():
        filters &= Q(object_pk=obj.pk)
    else:
        filters &= Q(content_object__pk=obj.pk)
    return self.filter(filters).delete()
