0

スタックオーバーフローのほぼ同じ問題についていくつかの質問がありますが、それらのどれも私が予測できる問題をカバーしていないようです。私のdjangoknowledegeは限られているので、過剰反応している可能性があります...そう..

私がdjangoで達成したいのは、2つのモデル、ListとListItemを同じビューで編集することです。共通フォームとしてリストし、inlineformsetとしてlistitemをリストします。これらの2つのフォームを作成することは問題ではありません。それらをビュー>テンプレートに渡すことも問題ではありません。

私が心配しているのは、

1)それらを同じアドレスに投稿し、その投稿リクエストを処理する方法。

2)javascriptを使用してこのフォームセットからこれらのインラインListItemを追加/削除するように設定する方法。

2.1)ListItemオブジェクトを削除するためにajaxリクエストをアドレスに送信してから、javascriptを使用してフォームのその部分を削除した場合。djangoビューパーツは、データベースから削除するオブジェクトをどのように認識しますか?オブジェクトのIDをテンプレートに渡して、ajaxで表示するために送り返す必要がありますか?

2.2)行を削除/追加した後に、変更されたListItemインラインフォームセット全体が投稿された場​​合、最初に使用されたオブジェクトのディクショナリが途中で変更されたため、問題が発生しませんか?

3)誰かが見ることができる他の落とし穴はありますか?

ところで、私はコード例を通して欲しくない。可能であれば、物事がどのように機能するか、そして私が何をすべきかを説明し、心に留めておいてください。あなたが最新の例を知っているなら、私もいくつかのリンクを使うことができます。

編集(そして私自身の質問に答える):私はそれを試しました、そしてここに私が見つけたものがあります:1)ちょうどそれらを置く...あなたはこのようにそれをすることができます:

form = ListForm(request.POST, instance=l)
formset = ShoppingListFormSet(request.POST, instance=l)

そして、必要なことは何でもします-非常にシンプルで簡単です。

2)既存の行/フォームを複製するか、1つ削除します。覚えておく必要があるのは、要素名が正しく、formsetが{{form.management_form}}でロードするものには、フォームの数に関する最新の正しい情報が含まれていることだけです。すべてのフィールド名も最新である必要があります。フォーム1とフォーム3の間からフォームを削除する場合は、フォーム3の番号を2に変更する必要があります。

2.1)要素IDは{{form.initial.id}}から抽出して、フォームで使用できます

2.2)form.management_form情報が正しく、フィールド名が最新の場合はいいえ(2を参照)

3)ビューを作成するだけで、クロスサイトリクエストフォージェリによってサイトが台無しになることはありません(http://docs.djangoproject.com/en/dev/ref/contrib/csrf/を参照) 。

アラン。

4

1 に答える 1