'Given a set of operations, suggest a name for the migration they might
represent. Names are not guaranteed to be unique, but put some effort
into the fallback name to avoid VCS conflicts if possible.'

@classmethod
def suggest_name(cls, ops):

    if (len(ops) == 1):
        if isinstance(ops[0], operations.CreateModel):
            return ops[0].name_lower
        elif isinstance(ops[0], operations.DeleteModel):
            return ('delete_%s' % ops[0].name_lower)
        elif isinstance(ops[0], operations.AddField):
            return ('%s_%s' % (ops[0].model_name_lower, ops[0].name_lower))
        elif isinstance(ops[0], operations.RemoveField):
            return ('remove_%s_%s' % (ops[0].model_name_lower, ops[0].name_lower))
    elif (len(ops) > 1):
        if all((isinstance(o, operations.CreateModel) for o in ops)):
            return '_'.join(sorted((o.name_lower for o in ops)))
    return ('auto_%s' % get_migration_name_timestamp())
