有没有人知道如何在Django的urlfield中去掉'http://'前缀?当我们将字段定义为urlfield并尝试向其中输入URL时,如果没有提供模式,Django会自动添加'http://'前缀。我不想要那个前缀。我尝试在clean_field和clean方法下删除它,但都不起作用。我查看了源代码。我看到Django在UrlField类的to_python方法中添加'http://'。有没有办法覆盖它以去掉'http://'呢?
URLField
不支持它。URLField
基本上只是一个带有URLValidator
的CharField
,因此如果你编写一个新的SchemelessURLValidator
(从内置的验证器派生),并将其添加到普通的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)