While this works perfectly, I don't like doing such special handling of a validator. Instead a suggest the following:
 * `clean()` is actually first cleaning the username.
 * `validate_usename_not_url` only validates with the username is a url

```python
if type:
  url = ExternalAccount.ACCOUNT_TYPES[type].get('url')
  if url and self.identifier.startswith('http'):
      # try to cleanup identifier

  if validator:
      # validate
```

Ideally we'd do all the validation / clean within the model which would make them useful for admin panel too, but our django version does not support errors on specific fields when validating in model's clean(), so nevermind.

What do you think?