如果没有方案前缀,字符串就不能是真正的 URL,因此URLField
将不支持它。
然而,这URLField
几乎只是 aCharField
和 a URLValidator
,所以如果你写一个新的SchemelessURLValidator
(从内置的派生)并将它添加到一个 normal CharField
,那应该会让你到达你想去的地方。
事实上,你的新验证器可能很简单
class SchemelessURLValidator(URLValidator):
regex = re.compile(
r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' # domain...
r'localhost|' # localhost...
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|' # ...or ipv4
r'\[?[A-F0-9]*:[A-F0-9:]+\]?)' # ...or ipv6
r'(?::\d+)?' # optional port
r'(?:/?|[/?]\S+)$', re.IGNORECASE)