Форум сайта python.su
после return теперь ничего нет… не знаю как вывести ошибку…
сейчас код формы таков
class SocWorkerForm(ModelForm): class Meta: model = SocWorker exclude = ('agency', 'atime') def __init__(self, *args, **kwargs): self.agency = kwargs.pop('agency') super(SocWorkerForm, self).__init__(*args, **kwargs) self.fields['department'].queryset = Department.objects.filter(agency=self.agency) self.fields['inn'].widget.attrs = {'maxlength' : '12'} self.fields['snils'].widget.attrs = {'maxlength' : '11'} self.fields['inn'].error_messages['inn'] = 'Test error mess' def clean_inn(self): inn = self.cleaned_data['inn'] if inn is not None: inn = str(inn) if len(inn)>=1 and len(inn)<10: raise forms.ValidationError('inn') inn=int(inn) return inn
Офлайн
А вьюха какая которая эту форму использует? Может в ней дело.
И вот это непонятно зачем
self.fields['inn'].error_messages['inn'] = 'Test error mess'
Отредактировано nnmware (Июнь 1, 2013 17:42:33)
Офлайн
@login_required def socworker_view(request, soc_id=0): agency = request.user.get_profile().agency socworker = get_object_or_404(SocWorker, pk=soc_id) alphabet = socworker.surname[:1] # первая буква фамилии if socworker.agency != agency: raise Http404 if request.method == 'POST': request.POST.__setitem__('alphabet', alphabet) # т.к. форма под это поле базы данных не выводится form = SocWorkerForm(request.POST, request.FILES, agency=agency, instance=socworker) if form.is_valid(): socworker = form.save() action = 'success' LogRecord(user=request.user.get_profile(), object_url="socworker/%d" % (socworker.id)).save() else: action = 'errors' else: action = 'new' form = SocWorkerForm(agency=agency, instance=socworker) return render_to_response('socworker.html', {'agency' : agency, 'department' : socworker.department, 'page' : 'socworkers', 'form' : form, 'action' : action, 'soc_id' : soc_id, 'firstname' : socworker.firstname, 'surname' : socworker.surname, 'fathername' : socworker.fathername, 'alphabet' : alphabet } , context_instance=RequestContext(request))
Офлайн
Ну скажем так- маловнятно как-то выглядит вьюха.
firstname - surname зачем в шаблон сувать?
Достаточно sockwoker один передать и в шаблоне в нужных местах брать {{ sockwoker.firstname }} и тп.
action не особо надо как раз. если в форме ошибки- см. доки, их тоже можно отловить в шаблоне.
С алфавитом какая то муть.
Я бы на Class-based View переделал все это, но у Вас подход явно не правильный.
Доки читайте лучше, серьезно. Слишком неправильно делаете.
Офлайн
Спасибо за замечания
Знаком с django и python вторую неделю, потому код корявый. View переделывать на класс-методы - переписать чужой код, который достался в наследство и учитывая текущие знания лучше предыдущее сделанное не трогать
Но всё же, как передать сообщение об ошибке..
Сейчас пришла лишь одна мысль - проверять POST-переменную… но это, понимаю, убого… оно конечно заработает, но как взять сообщение об ошибке после валидации формы… хех
Офлайн
action нужен для отображения информации пользователю
{% if action == "success" %} <div class="alert alert-success"> Данные успешно сохранены </div> {% elif action == "errors" %} <div class="alert alert-error"> Пожалуйста, исправьте ошибки в заполнении </div> {% endif %}
{% if form.firstname.errors %}py <div class="control-group error"> {% else %} <div class="control-group"> {% endif %}
Офлайн
Решил вопрос.
МОжет кому пригодится: проблема связана с тем, что в во view файле в строчке
form = SocWorkerForm(agency=agency, instance=socworker)
form = SocWorkerForm(request.POST, agency=agency, instance=socworker)
Офлайн