max_lengthとsizeが動的(つまり、これらの属性はモデル作成後に変更可能)である文字カウントを数えたり制限したりするためのJavaScriptコードがあるtextareaフォームエントリを使用しようとしています。Django:javascript文字カウンタ/リミッタ付きのテキストエリアウィジェットを使用していますか?
この機能をdjangoフォームのtextareaウィジェットに含めるには、カスタムウィジェットを作成する必要があると思いますが、実際にはテンプレートのJavaScriptコードをどのように結びつけるべきかわかりません。テキストエリアのサイズを変更するために、私は、テキストエリアウィジェットのインスタンスを生成するビューからフォーム作成に変数を渡すと仮定します。
これ以外の場合は、テンプレートの入力をhtml/jsで作成し、POSTデータをdjangoビューに送信し、getitemを使用して取得し、そのデータをモデルに直接保存します。もちろん、django'yではありませんが、組み込みのdjangoバリデーションとクリーンなデータ関数がなければ、おそらく何らかの形で脆弱です。
私が推測するように、2つの質問:私は、テンプレート内のテキストエリアのフィールドに私のjavascript関数を適用しない方法(a)の私はカスタムDjangoのフォームウィジェットを作成する場合は、(「onkeypressでは= jstextcounter ...」を含む)と、 (b) django形式のないビュー内のポストデータを取得し続けるだけの場合、脆弱性が存在し、データの妥当性を確認するためにはどうすればよいですか? (パブリックコメントボックスではなく、既にユーザーのログインが必要です)
誰かがこのようなカスタムフォームウィジェットを作成していて、どこかで良いスニペットを知っていますか?
乾杯...
EDIT のでMovieYodaの助けのおかげで、私はこの作業とDjangoでdynamic forms比べていくつかの読書を得ました。そして、%dの代用では、私のjs関数のmaxChars属性を動的に変更することができます。 forms.pyで
は私が持っている:テンプレート内のjs関数「textCounter」はmaxCharsの変数を使用して、文字の数を制限している
text=forms.CharField(max_length = 1000, widget=forms.widgets.Textarea())
def __init__(self, *args, **kwargs):
size = kwargs.pop('size')
maxChars = kwargs.pop('maxChars')
super(MyForm, self).__init__(*args, **kwargs)
self.fields['text'].widget.attrs['onkeypress'] = 'return textCounter(this, this.form.counter, %d);' % maxChars
self.fields['text'].widget.attrs['rows'] = size
self.fields['text'].widget.attrs['cols'] = '40'
。
<script type="text/javascript">
function textCounter(field, countfield, maxLimit) {
if (field.value.length > maxLimit)
{
field.value = field.value.substring(0, maxLimit);
return false;
}
else
{
countfield.value = maxLimit - field.value.length;
}
}
</script>
、ビューにkwargsから入力してフォームを作成:
FormInstance = MyForm(size=1, maxChars=5)
いくつかのコードしてください? –