def modify_fk_constraint(apps, schema_editor):
    """
    Delete's the current foreign key contraint on the outbound field, and adds
    it again, but this time with an ON DELETE clause
    """
    model = apps.get_model('message_sender', 'OutboundSendFailure')
    table = model._meta.db_table
    with schema_editor.connection.cursor() as cursor:
        constraints = schema_editor.connection.introspection.get_constraints(
            cursor, table)
        [constraint] = filter(lambda c: c[1]['foreign_key'], constraints.
            items())
        [name, _] = constraint
    sql_delete_fk = (
        'SET CONSTRAINTS {name} IMMEDIATE; ALTER TABLE {table} DROP CONSTRAINT {name}'
        .format(table=schema_editor.quote_name(table), name=schema_editor.
        quote_name(name)))
    schema_editor.execute(sql_delete_fk)
    field = model.outbound.field
    to_table = field.remote_field.model._meta.db_table
    to_column = field.remote_field.model._meta.get_field(field.remote_field
        .field_name).column
    sql_create_fk = (
        'ALTER TABLE {table} ADD CONSTRAINT {name} FOREIGN KEY ({column}) REFERENCES {to_table} ({to_column}) ON DELETE CASCADE {deferrable};'
        .format(table=schema_editor.quote_name(table), name=schema_editor.
        quote_name(name), column=schema_editor.quote_name(field.column),
        to_table=schema_editor.quote_name(to_table), to_column=
        schema_editor.quote_name(to_column), deferrable=schema_editor.
        connection.ops.deferrable_sql()))
    schema_editor.execute(sql_create_fk)
