6

私はModelFormから継承したフォームを持っています:

class ChildModel(ModelForm):
      class Meta:
          model = Documents
          fields = ('secretdocs')
          widgets = {
              'secretdocs': Select(attrs={'class': 'select'}),
          }

モデル「secretdocs」には uid があります。ただし、選択とオプションを出力すると、オプションの値は次のように表示されます。

<select class="select" id="id_secretdocs" name="secretdocs">
    <option value="1">My Secret Doc</option>
</select>

しかし、代わりにオプションの uid を持たせたい:

<select class="select" id="id_secretdocs" name="secretdocs">
    <option value="cd2feb4a-58cc-49e7-b46e-e2702c8558fd">My Secret Doc</option>
</select>

これまで、BaseForm のデータ オブジェクトを使用し、Select の value_from_datadict メソッドを上書きしようとしましたが、それは正しいアプローチではなかったと確信しています。誰も私がこれを行う方法を知っていますか?

前もって感謝します。

4

2 に答える 2

16

次のようなことができます。

class ChildModel(ModelForm):

  secretdocs = forms.ChoiceField(choices=[(doc.uid, doc.name) for doc in Document.objects.all()])
  class Meta:
      model = Documents
      fields = ('secretdocs', )
      widgets = {
          'secretdocs': Select(attrs={'class': 'select'}),
      }
于 2013-04-12T01:09:45.727 に答える