Django: Как проверить, оставил ли пользователь все поля пустыми (или начальными значениями)?
Я знаю, что is_valid()
в ограниченной форме проверяет, вводятся ли все необходимые данные. Это не то, что я хочу. Я хочу проверить, было ли заполнено поле в форме.
Любые идеи?
развивавший:
Я хочу дать пользователю возможность не заполнять форму вообще. Однако, если они пытаются заполнить его (т.е. Изменили значение в поле из него начальное значение --- обычно пустое значение), я хочу проверить его.
Вид будет примерно таким:
def get_opinion(request):
if request.method == 'POST':
f = OpinionForm(request.POST)
if form_is_blank(f):
return HttpResponseRedirect(reverse('thank_you_anyway'))
elif f.is_valid():
#Process here
return HttpResponseRedirect(reverse('thanks_for_participating'))
else:
initial = {'weekday': date.today().strftime('%A')}
f = OpinionForm(initial=initial)
return render_to_response(
'get_opinion.html',
{'form': f,},
RequestContext(request)
)
То, что я хочу, это часть form_is_blank()
.
Ответы
Ответ 1
Думаю, я должен ответить на собственный вопрос.
По-видимому, существует недокументированная функция Form
: has_changed()
>>> f = MyForm({})
>>> f.has_changed()
False
>>> f = MyForm({})
>>> f.has_changed()
False
>>> f = MyForm({'name': 'test'})
>>> f.has_changed()
True
>>> f = MyForm({'name': 'test'}, initial={'name': 'test'})
>>> f.has_changed()
False
Итак, это будет хорошо, как замена для form_is_blank()
(вернувшись, конечно).
Ответ 2
Чтобы получить эту функциональность для подмножества форм, используемых в фактической <form> тег вам также необходимо определить
class YourForm(forms.ModelForm):
def full_clean(self):
if not self.has_changed():
self._errors = ErrorDict()
return
return super(YourForm, self).full_clean()
поэтому, когда пользователю предлагается исправить ошибки проверки, он не отображает ошибки из форм, которые вы хотите проверить, только если какое-то значение не пусто (или по умолчанию).
Ответ 3
Вы должны установить required = False для всех полей формы и переопределить метод clean
для выполнения специальной проверки. Подробнее см. текущую документацию.
Ответ 4
Если вы положили required=True
в поле формы или в модель blank=False
, поэтому is_valid()
должен возвращать False.