Django-表单在发生错误后重置值
我正在研究由i18n翻译的多语言表单,我遇到了一个问题 当我使用{form.as_p}生成表单并向表单提供无效数据时,前面提供的数据不会从表单中清除-我希望在自定义表单中有相同的行为,这些行为将转换一些字段 这是我的自定义表单:Django-表单在发生错误后重置值,django,forms,Django,Forms,我正在研究由i18n翻译的多语言表单,我遇到了一个问题 当我使用{form.as_p}生成表单并向表单提供无效数据时,前面提供的数据不会从表单中清除-我希望在自定义表单中有相同的行为,这些行为将转换一些字段 这是我的自定义表单: <div class=""> {{ form.subject.errors }} <input class="contact_form" id="id_subject" type="text" name="subject" onfocus="if(th
<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>
{{form.subject.errors}
我如何修改它的行为,使它在发生错误后不会清理提供的数据?只有包含无效数据的字段才能从表单中删除
我在django文档中找不到关于该问题的任何内容。您可以为输入的value元素提供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>
{{form.subject.errors}
Sander的答案是正确的,但如果可能,您应该尽量避免在模板中手动呈现表单字段。在这种情况下,您可以在定义表单时设置初始值:
from django.utils.translation import ugettext_lazy, ugettext as _
class MyForm(forms.Form):
subject = Forms.CharField(initial=_("Title"), max_length=128))
然后,您可以编写一些javascript来处理onfocus
事件。下面是一个未经测试的代码段,使用jQuery方法
$(函数(){
$('id_subject')。焦点(函数(){
if(this.value=='{{form.subject.initial}}}'){
这个值=“”;
}
});
});
你也可以试试。由于您使用的是可翻译字符串,这可能有点复杂-我认为您可能必须在表单的
\uuuu init\uuuu
方法中设置小部件。好的,我使用ugettext按照您所说的做了。然而,我仍然不知道如何为我的表单字段创建“onfocus”。我需要更多的帮助。我添加了一个jQuery代码片段。我没有时间测试它,所以你必须自己调试它。祝你好运谢谢我明天再查
<script type="text/javascript">
$(function() {
$('#id_subject').focus(function() {
if (this.value == '{{ form.subject.initial }}') {
this.value = '';
}
});
});
</script>