title: Django URLField with custom scheme
body: <p>Django's <a href="https://docs.djangoproject.com/en/1.10/ref/models/fields/#urlfield" rel="noreferrer"><code>django.db.models.URLField</code></a> uses a <a href="https://docs.djangoproject.com/en/1.10/ref/validators/#urlvalidator" rel="noreferrer"><code>django.core.validators.URLValidator</code></a>:</p>
  
  <pre><code>class URLField(CharField):
      default_validators = [validators.URLValidator()]
  </code></pre>
  
  <p>Since it does not specify the schemes to accept, URLValidator defaults to this set:</p>
  
  <pre><code>schemes = ['http', 'https', 'ftp', 'ftps']
  </code></pre>
  
  <p>I want my URLField to accept <code>ssh://</code> URLs, so I tried this:</p>
  
  <pre><code>class SSHURLField(models.URLField):
    '''URL field that accepts URLs that start with ssh:// only.'''
    default_validators = [URLValidator(schemes=['ssh'])]
  </code></pre>
  
  <p>However when I try to save a new object with a valid <code>ssh://</code> URL, I get rejected.</p>
  
  <p>This also happens if I skip inheriting from URLField and inherit from CharField directly: (<strong>Edit</strong>: Actually this does work after I recreated my database. I'm not sure why the former doesn't work.)</p>
  
  <pre><code>class SSHURLField(models.CharField):
    '''URL field that accepts URLs that start with ssh:// only.'''
    default_validators = [URLValidator(schemes=['ssh'])]
  
    def __init__(self, *args, **kwargs):
      kwargs['max_length'] = 64
      super(SSHURLField, self).__init__(*args, **kwargs)
  </code></pre>
  
  <p>When I use the URLValidator directly in a test, it works:</p>
  
  <pre><code>def test_url(url):
    try:
      URLValidator(schemes=['ssh'])(url)
      return True
    except:
      return False
  
  &gt;&gt;&gt; test_url('ssh://example.com/')
  True
  
  &gt;&gt;&gt; test_url('http://example.com/')
  False
  </code></pre>