2010-09-06 28 views
1

我有一個簡單URLField在我的模型清潔數據是類型的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

我做了一個快速的實驗,結果發現,確實是可以使用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() 

下面是從外殼的一些示例輸出:

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

嗯,這個解決方案並不爲我工作。我收到一條錯誤消息:「輸入一個有效的鏈接,如www.ted.com」。我編輯了我的問題,並將問題中的模型和表單包含在內。這可能與版本有關嗎?我正在使用python 2.6.1和django 1.2.1。 – iJK 2010-09-06 19:18:23

+0

@iHeartDucks:我已經更新了我的答案。往上看。 – 2010-09-07 04:11:06

+0

感謝Manoj。我再次聲明標題和鏈接字段的唯一原因是給出自定義錯誤消息。 – iJK 2010-09-07 14:03:48