0

標準の django フォーム入力フィールドと一緒に表示される、いくつかの複雑な GUI 要素 (強調表示できる多くの日を含むカスタム カレンダーなど) があります。これらの複雑なフォームからのデータ I/O を Django フォームと共に処理したいと考えています。

以前は、Django フォームが保存またはレンダリングされた後、HTML フォームでこれらのカスタム GUI 要素を処理するために AJAX 要求を使用していましたが、これは多くの問題とカスタマイズされた AJAX コーディングにつながります。Django フォームで複雑な対話ウィジェットを処理する良い方法は何ですか?

4

3 に答える 3

1

あなたの質問は非常に漠然としているので、カスタム フィールドの作成に関する Django のドキュメントを読むことをお勧めします。また、カスタム ウィジェットの作成について調査することもできます。残念ながら、ドキュメントにはそれが少し欠けていますが、Google 検索では、これを含むいくつかの有用なブログ投稿が表示されます。

于 2009-03-17T15:00:32.897 に答える
1

Django Form サブクラスを HTML ページに出力する方法に応じて、3 つのオプションがあります。

1 つ目は Form とはまったく関係ありません。すべての HTML フォーム入力は最終的に request.POST になるため、そこからアクセスできます。確かに、それらは Form サブクラスにバインドされないため、カスタム フォーム コンストラクターを使用するか、request.POST でインスタンス化した後に Form オブジェクトにプロパティを設定して、値を手動で挿入する必要があります。これはおそらく最も望ましくないオプションですが、ユースケースが実際に他に何もサポートしていない場合に備えて言及します.

2 つ目は、HTML でフォーム フィールドを手動で出力する場合のオプションです (つまり{{ myform.field }}、 だけではなくを使用します{{ myform }}。この場合、隠し変数を作成して、カレンダー GUI ツールの値を含めます (GUI ツールが既に提供している可能性があります)。この隠しフィールドを正しい名前と ID で Form サブクラス自体に追加し、隠し django フォーム ウィジェットがあることを確認します. 必要に応じて、Rob が提案するように javascript を使用して隠しフィールドに入力します. フォームが投稿された場​​合、フォーム サブクラスにその名前のフィールドがあるため、通常どおりフォーム サブクラスにバインドされますclean()

3 番目の最良のオプションは、カスタム django フィールドを作成することです。アンドリューの投稿にはリンクがあります。Django フィールドには要件を指定する機能があるjsためcss、カレンダー ウィジェットを使用するすべてのページに対して、これらの依存関係を自動的にカプセル化できます。

于 2009-03-17T15:13:04.690 に答える
1

完全に理解しているかどうかはわかりませんが、UI の値を JavaScript を介してフォームの隠し要素に保存することができます。これは、UI で値を選択するとき、またはフォームを送信するときに実行できます。送信データが送信される前に submit() を使用して保存する JQuery を想定した疑似コード:

$('#myForm').submit(function(){
  // get the value of your UI
  var calendarValue = calendarWidget.getValue()

  // #calendarData is the hidden field
  $('#calendarData').val(calendarValue)
})

これには明らかに JS が必要ですが、UI 要素の使用も必要です。

于 2009-03-17T14:56:36.447 に答える