有没有人知道如何摆脱Django urlfield中的'http://'前缀.
我的意思是当我们将一个字段定义为urlfield并尝试输入一个url时,如果没有提供架构,django将自动添加'http://'前缀.我不想要那个前缀.
我尝试在clean_field和clean方法下删除它.它不起作用.
我深入研究了源代码.我看到django在UrlField类的'to_python'方法中添加'http://'.
有没有办法覆盖它以摆脱'http://'?
在我的 Django REST Framework 项目中,我有一个模型类,用于保存 Django 应用程序将在后台任务中抓取的服务:
class Service(models.Model):
name = models.CharField(max_length=50)
description = models.CharField(max_length=250)
root_url =URLField(unique=True)
Run Code Online (Sandbox Code Playgroud)
早些时候,我在本地计算机上运行了这些服务和 Django 应用程序。现在,我将服务和 Django 应用程序容器化,并让它们在 Docker 上运行。
所以现在我在添加 dockerized 服务时遇到问题,因为它的根 URL: http://sensor-service:8080/。抛出的错误是:'Enter a valid URL.'。
当向我的 Django REST API 进行 POST 时,以及通过 Django REST Framework 提供的 GUI 添加服务时,都会出现此问题。
因此,基于/sf/answers/3448348921/和http://www.django-rest-framework.org/api-guide/serializers/#field-level-validation我尝试了以下操作。注意:最重要的行是第 5 行:允许主机名后面不跟域名和/或 TLD。
模型.py:
class DockerServiceDNSUrlsCompatibleURLValidator(URLValidator):
def __init__(self, schemes=None, **kwargs):
self.host_re = '(' + self.hostname_re + self.domain_re + self.tld_re \
+ '|localhost|' \
+ self.hostname_re + ')' …Run Code Online (Sandbox Code Playgroud)