#django #forms #validation
#джанго #формы #утверждение
Вопрос:
Я работаю над пользовательским редактором для своих форм Django. Необъяснимо, но я не могу получить желаемый результат. Вот мой код
from django import forms from django.core import validators from django.core.exceptions import ValidationError from .models import Vote from django.core.validators import MaxValueValidator, MinValueValidator def use_one(value): if value != 1: raise forms.ValidationError("Value is not 1!") class MyForm(forms.Form): main_form = forms.IntegerField(validators = [use_one], label= 'Main', required = False, widget = forms.NumberInput( attrs={'id': 'mainInput', 'name': 'main, 'href': '#', 'value': '', 'class': "form-control"}))
Есть какие-нибудь мысли?
views.py
form = MyForm() main_result = request.GET.get(main_form) form.fields['main_form_result'].initial = main_result context = {form: form}
Комментарии:
1. Как вы используете эту форму в представлении?
2. Обновил приведенный выше код с помощью логики представлений
3. Ну, вы никогда не проверяете свою форму.
4. Как получилось, что у меня был встроенный валидатор, однако, например
main_form = forms.IntegerField(validators = [MinValueValidator(0)])
, я получаю сообщение об ошибке проверки, когда мне не нужно проверять свою форму в представлении?
Ответ №1:
Хорошо, что вы никогда не подтверждаете свою форму. Вы должны перейти request.GET
к форме и позволить форме подтвердить ее, так что:
def some_view(request): form = MyForm(request.GET) form.is_valid() context = {'form': form} return render(request, 'some-template.html', context)
Часто формы отправляются как запрос POST, особенно если они создают, обновляют или удаляют сущности.
Комментарии:
1. Итак, ранее я никогда не проверял свою форму, и встроенный валидатор работал примерно так:
main_form = forms.IntegerField(validators = [MinValueValidator(0)])
не могли бы вы кратко объяснить, почему здесь возникает ошибка проверки, когда я не проверяю свою форму в представлении?2. @nick_rinaldi: это не вызовет ошибку валидатора, если вы не передадите ему данные. Вы уверены, что это не вызвало еще одной ошибки? Неограниченная форма недопустима/недопустима, то есть просто неограничена. Значение
.is_valid()
всегда будет возвращать значение false, если вы не вызываете его сrequest.GET
помощью илиrequest.POST
(или другого объекта, подобного словарю).3. Нет, я хочу сказать, что приведенный выше код в моем комментарии вызывает ошибку валидатора, когда я передаю его данные на внешний интерфейс. Даже если я вызову .is_valid() в своей форме, как в этом коде,
form = MyForm(request.GET) form.is_valid()
я получу сообщение об ошибке, в котором говорится, что'NoneType' object has no attribute 'none'
4. @nick_rinaldi:
.is_valid()
не должен вызывать исключения: он ловит всеValidationError
s. Так что, если это вызывает ошибку, это означает, что что-то сломано. Можете ли вы поделиться обратной связью, отредактировав вопрос?5. Я не могу, я не могу поделиться своей кодовой базой заданий, поэтому я изменил код в вопросе, чтобы создать пример проблемы.