清理URLField类型的数据

时间:2010-09-06 18:03:38

标签: python django django-models django-forms

我的模型中有一个简单的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)

1 个答案:

答案 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”。我编辑了我的问题并包含了相关的模型和表格。

我验证了您的表单类确实给出了错误。

经过一些小改动后,我才能让它发挥作用。我所做的就是删除自定义的titlelink字段。我们在这里使用模型表单,底层模型已经有了这些字段。我相信重新定义导致在调用自定义清理方法之前引发验证错误

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>