有谁知道如何摆脱Django urlfield中的'http://'前缀。

我的意思是,当我们将字段定义为urlfield并尝试为其输入url时,如果没有提供任何架构,django将自动在其中添加“ http://”前缀。我不要那个前缀。

我尝试在clean_field和clean方法下将其删除。没用

我深入研究源代码。我看到django在UrlField类的'to_python'方法中添加了'http://'。

有什么方法可以覆盖它以摆脱“ http://”?

最佳答案

如果没有方案前缀,则字符串不能是真实的URL,因此URLField不支持它。

但是,URLField几乎只是带有CharFieldURLValidator,因此,如果您编写一个新的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)

07-24 14:26