-
здравсвуйте.
Имеется формаfrom django import forms
class UrlForm(forms.Form):
url = forms.URLField(label='url', verify_exists=False)
проверяю на валидацию так:
Выводит ошибкуform = UrlForm(request.POST)
if form.is_valid():
....
else:
return render_to_response('...', {'errors':form.errors})
'dict' object has no attribute 'render_context'
Как исправить? И как добавить в is_valid свои правила валидации для данного поля? Такие как сравнение с определенным значением? -
Как исправить?
Подозреваю, что что-то напутали с параметрами render_to_response
И как добавить в is_valid свои правила валидации для данного поля?
http://docs.djangoproject.com/en/1.2/ref/forms/validation/#cleaning-a-specific-field-attribute
-
Спасибо. Однако возникла проблема.
Пишу:
Однако когда я пишу в поле http://foo.ru эта ошибка не вылетает, а валидация проходит успешно.class UrlForm(forms.Form):
url = forms.URLField(label='url', verify_exists=False)
def clean(self):
cleaned_data = self.cleaned_data
url = cleaned_data.get("url")
if url=="foo.ru":
msg = u"Must put 'help' in subject when cc'ing yourself."
self._errors["url"] = self.error_class([msg])
del cleaned_data["url"]
return cleaned_data
Пробовал и так:def clean(self):
cleaned_data = self.cleaned_data
url = cleaned_data.get("url")
if url=="foo.ru":
raise forms.ValidationError("Did not send for 'help' in "
"the subject despite CC'ing yourself.")
return cleaned_data -
ну как он может вылететь, сами пишете http://foo.ru, а проверяете на равенство с foo.ru
-
Я писал и http://foo.ru и просто foo.ru
-
Почитайте, пожалуйста, внимательнее текст по моей ссылке, это раз.
Поотлаживайте свой код, посмотрите, что на самом деле лежит в cleaned_data['url'], это два.
-
Ребят, была похожая проблема с текстом "'dict' object has no attribute 'csrf_exempt'". Я использовал стандартный декоратор csrf_exempt и думал, что он обязателен для формы. Однако закомментировав строчку с декоратором, но оставив {% csrf_token %} в шаблоне токен прекрасно генерируется и работает. Так и должно быть?
-
1. прочитал все еще раз, как я понял, если мне необходимо проводить дополнительную валидацию какого либо поля, то я создаю функцию clean_<field name>
При этом я хочу формировать словарь ошибок, следовать тельно буду использовать self._errors
Вот мой код:
2. Сказали проверить что лежит в cleaned_data['url']from django import forms
class UrlForm(forms.Form):
url = forms.URLField(label='url', verify_exists=False)
def clean_url(self):
url = self.cleaned_data['url']
if url == "http://www.example.com":
msg = u'FUCK!'
self._errors["url"] = self.error_class([msg])
return url
я забил все это дело в manage.py shell
И написал:
Помогите решить проблему, пожалуйста! Как провести проверку данных и сформировать ошибку?In [21]: u = UrlForm()
In [22]: u.url='http://www.bbeeasd.su/'
In [23]: u.cleaned_data['url']
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
AttributeError: 'UrlForm' object has no attribute 'cleaned_data' -
cleaned_data появляется после вызова is_valid
-
Забыл сказать, во вьюхе валидация проходит успешно...
-
Провел сначала is_valid(), вот что получилось
Вообще не понимаю. почему false?In [26]: u = UrlForm()
In [27]: u.url='http://www.yandex.ru/'
In [28]: u.is_valid()
Out[28]: False -
Попытался вот так:
При этом в shell:# -*- coding:utf-8 -*-
from django import forms
class UrlForm(forms.Form):
url = forms.URLField(label='url', verify_exists=False)
def clean_url(self):
data = self.cleaned_data['url']
if "ex123ample.com" == data:
raise forms.ValidationError("You have forgotten about Fred!")
return data
А во вьюхе:In [26]: u = UrlForm()
In [27]: u.url='http://www.yandex.ru/'
In [28]: u.is_valid()
Out[28]: False
Если я не ввожу значение то ошибка вывоодится о незаполненом поле. Если ввожу в поле 'http://www.yandex.ru/' все прекрасно работает.if request.method == 'POST':
form = UrlForm(request.POST)
if form.is_valid():
url = form.cleaned_data.get('url')
....
return render_to_response('template1.html', {'url':url})
else:
return render_to_response('template2', {'errors':form.errors['url']})
else:
return render_to_response('temaplte2', clear_form(request))
Как такое может быть?
Помогите разобраться... -
вы можете передать связанные данные в джанго-форму только параметром конструктора. после этого есть смысл вызывать метод
is_valid().>>> form = UrlForm({'url': 'http://yandex.ru/'}) >>> form.is_valid() True -
Новичок, перестаньте стучать по всем клавишам сразу.
Если я не ввожу значение то ошибка вывоодится о незаполненом поле.
Логично, разве нет?
Если ввожу в поле 'http://www.yandex.ru/' все прекрасно работает.
"Прекрасно" это как? Сохраняет все? Тоже логично, "ex123ample.com" == data дает False.
Выведите уже внутри clean_url текущие значения (через print, pdb или наконец Exception киньте, чтоб джанговскую страницу ошибки увидеть со всем переменными) и посмотрите, что там чему равно. Неужели так приятно пытаться перебрать двигатель через выхлопную трубу, и удивляться, что получается какая-то ерунда?
-
Приношу свои извинения, что так нафлудил в теме. Просто ничего не получалось ну и + того что мой ник соответсвует действительности.
Все получилось, проверив все в shell увидел что в cleaned_data строка лежит, как юникодовская.
Подставив все получилось!
Спасибо. Приношу еще раз свои извинения за флуд.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.



