Django--URLField问题涉及绝对URL和相对URL

|| 我有一个URLField在我的模型中是可选的。我还在ModelForm中将其设置为可选。问题是我只希望表单生成绝对URL。我以为URLField会自动执行此操作,但目前对我而言不起作用。 因此,为了克服这个问题,我决定重写模型上的save()方法。我想在modelform字段上覆盖clean_field()方法;但是,似乎无法使用\“ required = False \”在表单字段上设置clean_field方法。
   def save(self,*args, **kwargs):
       if self.url:
            if not self.url.startswith(\'http://\'):
               self.url=\'http://\' + self.url
       super(Post, self).save(*args, **kwargs)
我在这里想念什么吗?这是完全可以接受的吗?     
已邀请:
        如果您的模型有一个名为
url
的字段,并且您在ModelForm上定义了clean_url()方法,则当url存在时,无论是否为可选字段,都应调用该方法。通过在save方法中执行验证,您正在混合各种疑虑并破坏了ModelForm类的设计。成功调用is_valid()后,始终应将验证视为完成。 但是除此之外,这里还有另一个问题。 请记住,URL写为“ 2”。绝对路径被编码到URL中,但是URL本身不仅仅是绝对路径。 相对路径的问题是确定它们相对于什么。绝对路径以“ /”开头,并且始终相对于服务器或文件系统根目录。相对路径是相对于当前活动资源的。这里的问题是,当前的活动资源是什么?此外,确保save()知道(并因此需要)此信息肯定是一个损坏的体系结构。 除此之外,您上面的代码将在替代方案(https)上中断,它不会将主机插入URL,对于非根目录的路径,我们如何知道它们相对于什么? 我认为您有正确的策略开始。仅允许输入绝对路径和URL,而不允许相对路径。让您的ModelForm用有效的URL替换绝对路径。为此,请再看一下ModelForm上clean()方法的文档,如果您在使该方法起作用时遇到问题,请针对该问题打开一个新问题。     

要回复问题请先登录注册