@classmethod
def different_attributes(cls, old, new):
    """
        Backwards-compat comparison that ignores orm. on the RHS and not the left
        and which knows django.db.models.fields.CharField = models.CharField.
        Has a whole load of tests in tests/autodetection.py.
        """
    if not cls.is_triple(old) or not cls.is_triple(new):
        return old != new
    old_field, old_pos, old_kwd = old
    new_field, new_pos, new_kwd = new
    old_pos, new_pos = old_pos[:], new_pos[:]
    old_kwd = dict(old_kwd.items())
    new_kwd = dict(new_kwd.items())
    if 'unique' in old_kwd:
        del old_kwd['unique']
    if 'unique' in new_kwd:
        del new_kwd['unique']
    if old_field != new_field:
        if old_field.startswith('models.') and (new_field.startswith(
            'django.db.models') or new_field.startswith('django.contrib.gis')):
            if old_field.split('.')[-1] != new_field.split('.')[-1]:
                return True
            else:
                old_field = new_field = ''
    if (old_pos and 'to' in new_kwd) and ('orm' in new_kwd['to'] and 'orm'
         not in old_pos[0]):
        try:
            if old_pos[0] != new_kwd['to'].split("'")[1].split('.')[1]:
                return True
        except IndexError:
            pass
        old_pos = old_pos[1:]
        del new_kwd['to']
    return old_field != new_field or old_pos != new_pos or old_kwd != new_kwd
