6

私は次のフォームを持っています:

from models import MyModel

class MultProgresemosReferenciasForm(forms.Form):
    selected = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                    queryset=MyModel.objects.filter(active=True))                   

これを次のテンプレートで使用します。

  <form action="" method="post">                                                                                             
      {% for field in form %}                                                                                                
        {{ field }}
      {% endfor %}                                                                                                           
      {% csrf_token %}                                                                                                       
      <input type="submit" value="Submit Selected" />
  </form>                                                                                                                    

次の html をレンダリングします。

  <form action="" method="post">
    <ul>
<li><label for="id_selected_1"><input type="checkbox" name="selected" value="9" id="id_selected_8" /> prog 1420000930 - pp 0.0078125</label></li>
<li><label for="id_selected_2"><input type="checkbox" name="selected" value="10" id="id_selected_9" /> prog 1420001041 - pp 0.00390625</label></li>
    </ul>
      <div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='csrf_token_hash_string...' /></div>
      <input type="submit" value="Submit Selected" />
  </form>

ご覧のとおり、テンプレートは各チェックボックスのラベルを取得します (そこに表示される値を持つ 2 つの文字列フィールドを持つモデルから)。

問題は、チェックボックスのこのラベルにアクセスしてカスタマイズするにはどうすればよいですか? 同じモデルの名前を使用しようとしていますが、微調整しています。ジャンゴでこれを達成する簡単な方法はありますか?

field.label を使用しようとしましたが、得られるのは ChoiceField 全体の「選択済み」ラベルだけです。それは私が望むものではありません。生成されたチェックボックスごとにラベルを取得する必要があります...

4

1 に答える 1

6

フォームで上書きしたいと思いますlabel_from_instance

モデルのUnicodeメソッドが呼び出され、フィールドの選択で使用するオブジェクトの文字列表現が生成されます。カスタマイズされた表現を提供するには、ModelChoiceFieldをサブクラス化し、label_from_instanceをオーバーライドします。このメソッドはモデルオブジェクトを受け取り、それを表すのに適した文字列を返す必要があります。例えば:

def label_from_instance(self, obj):
    #custom logic here...
    return smart_unicode(obj)
于 2012-04-26T19:56:38.817 に答える