我的模型中有一个简单的URLField
link = models.URLField(verify_exists = False, max_length = 225)
我想从字段中删除前导和尾随空格。我不认为我可以在“clean_fieldname”或“clean”方法中执行此操作。
我是否需要对“URLField”进行子类化并删除to_python方法中的空格?有没有更好的方法来做这个没有任何子类?
被修改
这是我的表格
class StoryForm(forms.ModelForm):
title = forms.CharField(max_length=225, error_messages={'required' : 'Enter a title for the story'})
link = forms.URLField(max_length=225, error_messages={'required' : 'Enter a link to the story', 'invalid' : 'Enter a valid link like www.ted.com'})
class Meta:
model = models.Story
fields = ('title', 'link')
def clean_link(self):
link = self.cleaned_data['link']
return link.strip()
和我的模特
class Story(models.Model):
title = models.CharField(max_length = 225)
link = models.URLField(verify_exists = False, max_length = 225)
答案 0 :(得分:0)
我做了一个快速实验,发现您确实可以使用clean_
方法删除前导/尾随空格。像这样:
# models.py
class UrlModel(models.Model):
link = models.URLField(verify_exists = False, max_length = 225)
def __unicode__(self):
return self.link
# forms.py
class UrlForm(ModelForm):
class Meta:
model = UrlModel
def clean_link(self):
link = self.cleaned_data['link']
return link.strip()
# shell
In [1]: from test_app.forms import UrlForm
In [2]: f = UrlForm(data = dict(link = ' http://google.com '))
In [3]: f.is_valid()
Out[3]: True
In [4]: f.save()
Out[4]: <UrlModel: http://google.com>
<强>更新强>
我收到错误消息“输入有效的链接,如www.ted.com”。我编辑了我的问题并包含了相关的模型和表格。
我验证了您的表单类确实给出了错误。
经过一些小改动后,我才能让它发挥作用。我所做的就是删除自定义的title
和link
字段。我们在这里使用模型表单,底层模型已经有了这些字段。我相信重新定义导致在调用自定义清理方法之前引发验证错误。
class StoryForm(forms.ModelForm):
class Meta:
model = Story
fields = ('title', 'link')
def clean_link(self):
link = self.cleaned_data['link']
return link.strip()
以下是shell的一些示例输出:
In [1]: from test_app.forms import StoryForm
In [2]: data = dict(title="Google story", link = " http://google.com ")
In [3]: f = StoryForm(data)
In [4]: f.is_valid()
Out[4]: True
In [5]: f.save()
Out[5]: <Story: Google story http://google.com>