Я провел быстрый эксперимент и обнаружил, что вы действительно можете использовать метод 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()
Вот пример вывода из оболочки:
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>