Django - форма сбрасывает значения после ошибки - PullRequest
4 голосов
/ 07 марта 2012

Я работаю над многоязычной формой, которая переведена i18n, и у меня возникла проблема.

Когда я использую {{form.as_p}} для генерации форм и предоставляю неверные данные для формы,предоставленные ранее данные не удаляются из формы - и я хочу, чтобы в моей пользовательской форме было то же поведение, в которое будут переведены некоторые поля.

Это моя пользовательская форма:

<div class="">
{{ form.subject.errors }}
<input class="contact_form" id="id_subject"
type="text" name="subject"
onfocus="if(this.value=='{% trans "Title" %}') this.value=''"
value="{% trans "Title" %}"
maxlength="128" />
</div>

КакЯ могу изменить его поведение, чтобы он не очищал предоставленные данные после ошибки?И только поля, которые содержали недопустимый dada, должны быть удалены из формы.

Я не смог найти ничего в документации по django по этому вопросу.

Ответы [ 2 ]

4 голосов
/ 07 марта 2012

Вы можете предоставить form.subject.value для элемента значения ввода.

<div class="">
{{ form.subject.errors }}
<input class="contact_form" id="id_subject"
type="text" name="subject"
onfocus="if(this.value=='{% trans "Title" %}') this.value=''"
value="{% if form.subject.value %}{{ form.subject.value }}{% else %}{% trans "Title" %}{% endif %}"
maxlength="128" />
</div>
3 голосов
/ 07 марта 2012

Ответ Сандера верен, но, если возможно, вам следует избегать ручной визуализации полей формы в шаблоне. В этом случае вы можете установить начальное значение при определении формы:

from django.utils.translation import ugettext_lazy, ugettext as _

class MyForm(forms.Form):
    subject = Forms.CharField(initial=_("Title"), max_length=128))

Затем вы можете написать некоторый javascript для обработки события onfocus. Вот непроверенный фрагмент кода с использованием метода jQuery .focus().

<script type="text/javascript">
$(function() {
  $('#id_subject').focus(function() {
    if (this.value == '{{ form.subject.initial }}') {
      this.value = '';
    }
  });
});
</script>

Вы также можете попробовать передать onfocus в качестве атрибута виджета . Поскольку вы используете переводимые строки, это может быть немного сложнее - я думаю, вам, возможно, придется установить виджет в методе __init__ формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...