首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >URLField型清洗数据

URLField型清洗数据
EN

Stack Overflow用户
提问于 2010-09-06 18:03:38
回答 1查看 1.3K关注 0票数 1

我的模型中有一个简单的URLField

代码语言:javascript
复制
link = models.URLField(verify_exists = False, max_length = 225)

我想从场地上去掉前部和后部的空位。我不认为我可以在"clean_fieldname“或”干净“方法中做到这一点。

我需要子类"URLField“并删除to_python方法中的空格吗?有没有更好的方法来做到这一点,没有任何子类?

编辑的

这是我的表格

代码语言:javascript
复制
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()

我的模型

代码语言:javascript
复制
class Story(models.Model):
    title = models.CharField(max_length = 225)
    link = models.URLField(verify_exists = False, max_length = 225)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-06 18:34:46

我做了一个快速实验,发现您确实可以使用clean_方法删除前导/尾随空格。就像这样:

代码语言:javascript
复制
# 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字段。我们在这里使用一个模型表单,底层模型已经有了这些字段。我认为重新定义会导致在调用自定义clean方法之前引发验证错误。

代码语言:javascript
复制
class StoryForm(forms.ModelForm):
    class Meta:
        model = Story
        fields = ('title', 'link')

    def clean_link(self):
        link = self.cleaned_data['link']
        return link.strip()

下面是shell的一些示例输出:

代码语言:javascript
复制
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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3653423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档