2011-01-30 1 views
0

データベーステーブルからselectオプションをプルするドロップダウン(選択)フォームがあります。オプションは、特定の変数に応じてほぼ常に変化します。django - データベーステーブルから自動生成されたselect文にカスタムオプションを挿入します

ドロップダウンの一番下まで、常に同じオプションを追加する必要があります。 「もっと多くのオプション」と言えるもの。何か案は?ありがとう!

答えて

2

を必要とする場合、これはあなたが使用しているフォームのサブクラスに__init__をオーバーライドすることによって行うのに十分に簡単です尋ねる、お役に立てば幸いです。 ModelFormでも同じようにうまくいくはずです。私はあなたがどのように質問に基づいて選択肢を投入しているかわからない。 <p>タグでレンダリングするとき

class ChoiceForm(Form):               
    choice = ModelChoiceField(queryset=MyModel.objects.all())      

    def __init__(self, *args, **kw):            
     super(ChoiceForm, self).__init__(*args, **kw)       

     # Add to choices iterator            
     choice_field = self.fields['choice']          
     choice_field.choices = list(choice_field.choices) + [(0, 'More Options')] 

これは以下を与える:

<p> 
    <label for="id_choice">Choice:</label> 
    <select name="choice" id="id_choice"> 
     <option value="" selected="selected">---------</option> 
     <option value="0">More Options</option> 
    </select> 
</p> 

がしかし警告され、これはあなたがそれを作成した後、選択肢が修正されますフィールド。通常のModelChoiceFieldは、渡したクエリーセットの結果が変更された場合、その選択肢を自動的に更新します。

0

私はこの方法で解決するだろう: ユーザーがクリックしたときにあなたが現在 2-、完全なリスト 、3-持つ限られた選択肢と他との1を2つの隠された選択ボックスを作成しないよう1-選択ボックスを描画"more options"ボタンを押すと、すべてのオプションがフラッシュされ、フルセレクトボックスからのものと一緒に再投入されます。 4-オプションを使用すると、ユーザーは「less options」に戻ることができます。この場合は、オプションを再度フラッシュし、隠された選択ボックスからロードする必要があります。

これを行うには、style = "display:none" CSSプロパティで2つの選択ボックス(less optsとmore opts)をレンダリングし、jsボタンのclickイベントを書き込むテンプレートが必要です私は通常jQueryのそれに)スイッチングを行うだろう。

はそれだけであなたには、いくつかのコードサンプル

関連する問題