2012-03-07 8 views
3

i18nによって翻訳された多言語フォームに取り組んでおり、問題が発生しました。私はフォームを生成するために{{form.as_p}}を使用して、私は、フォームへの無効なデータを提供する場合Djangoフォームはエラー後に値をリセットします

、以前提供されたデータは、フォームから清掃されていない - と私は持っています私のカスタムフォームで同じ動作をしたいです一部のフィールドが翻訳されました。

これは私のカスタムフォームです:

<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のドキュメントでその問題が見つかりませんでした。

答えて

3

サンダーの答えは正しいですが、可能であれば、テンプレートのフォームフィールドを手動でレンダリングしないようにしてください。

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

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

あなたはその後、onfocusイベントを処理するためにいくつかのJavaScriptを書くことができます:あなたはフォームを定義するときに、このケースでは、初期値を設定することができます。 jQueryの.focus()メソッドを使用して、テストされていないスニペットがあります。

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

passing the onfocus as a widget attributeでもお試しいただけます。翻訳可能な文字列を使用しているので、これは少し複雑かもしれません。フォームの__init__メソッドでウィジェットを設定する必要があるかもしれないと思います。

+0

ええと、私はあなたがugettextを使って言ったようにしました。しかし、私はまだ私のフォームフィールドの "onfocus"をどのように作ることができるのか分かりません。私はそれにもっと助けが必要です。 – Efrin

+0

jQueryスニペットを追加しました。テストする時間がないので、自分でデバッグする必要があります。がんばろう! – Alasdair

+0

ありがとうございます。私は明日それをチェックする – Efrin

3

入力の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> 
+0

これは役に立ちました、ありがとう! – Efrin

関連する問題