0

私はいくつかの同様の質問を見てきましたが、私が望んでいた方向に私を向けるものは何もありませんでした. モデルから構築された標準の django フォームがある状況があります。このフォームには、コメントを投稿するアイテムを選択するドロップダウン ボックスがあります。今は、人々がアイテムごとにブラウズし、リンクをクリックしてその特定のアイテムにコメントできるようにしたいと考えています。私が望むのは、ユーザーがそのリンクをクリックすると、同じ古いフォームが表示されることですが、ドロップボックスは、コメントしたいアイテムにデフォルト設定されます.

既存のフォームでこれを行う適切な方法はありますか? この必要性のために完全に別のフォームを作成する必要がありますか?

注意として、これは真のコメント システムではなく、そのように意図されたものでもありません。私が持っていた1つのアイデアは、次のようなURLを構築することでした:

comment/?q=item1

「item1」セクションをキャッチし、保存機能をオーバーライドしてフォームに会社を隠しながら、それをフォームに強制します。UI の観点からは、私はそのアイデアに満足していません。考えやアイデアはありますか?

4

1 に答える 1

1

私があなたの質問を正しく読んでいれば、これはかなり一般的なユースケースであり、django フォームによって十分にサポートされています。説明する両方のシナリオで同じフォームを使用できます。

コメントする項目の主キーが 5 であるとします。ユーザーがクリックするリンクを次のような URL で作成します。

<a href="/comment/5/">Comment on me</a>

(これはスラッグ フィールドでも同様に機能しますが、識別子がフィールドの選択肢の ID とどのように一致する必要があるかについては、以下のコメントを参照してください: /comment/my_item_1/)

ビューはパラメーターを取得し、パラメーターのフォームに渡しinitialます。

def show_comment_form(request, item_id):
    form = MyCommentForm(initial={'item_drop_down':item_id})

ドロップダウンが事前に選択された状態でフォームが表示されます。もちろん、この例が機能するためには、item_idパラメーターは項目フィールドの選択識別子が何であれ一致する必要があります (モデル フィールドから自動的に構築された場合、それはおそらく利用可能な項目のクラスの主キーになります)。 .

つまり、選択肢が次のようになっているとします。

choices = ( (1, 'Item 1'),
            (2, 'Item 2') )

次に、結果のオプション (つまり: )item_idになるため、 は 1 または 2 である必要があります。自動的に作成された ModelForm クラスがこれを処理しますが、それ以外の場合は注意してください。<select><option value="1">Item 1</option>

詳細については、django docs: Dynamic Initial Valuesを参照してください。

于 2009-04-03T23:02:06.837 に答える