フォームにreadonlyとかdisabledを指定する

フォームにreadonlyとかdisabledを指定する


やり方は2つある。
  • __init__内でwidgetオブジェクトのHTMLタグ属性(widget.attrs['~'])を書き換えてやる
  • Metaのwidgetsで、コンストラクタのattrsキーワードにDICTを指定する

サンプル
class LogFixedDateForm(LogForm):
   def __init__(self, user, date, *args, **kwargs):
       assert isinstance(date, datetime.date)
       super(LogFixedDateForm, self).__init__(user, *args, **kwargs)
       if self.is_bound:
           self.data = self.data.copy()
           self.data['date'] = str(date)
       else:
           self.initial['date'] = date
       # self.fields['date'].widget = forms.DateInput()
       # self.fields['date'].widget.attrs['readonly'] = True
   class Meta(LogForm.Meta):
       widgets = {'date': SelectDateWidget(attrs={'disabled':True})}

コメントアウトしているのか前者のやりかた
その下のMeta指定が後者のやりかた。

前者の場合は、widgetをわざわざDateInputにしているが、この場合HTMLタグでは
<input type="text">となるので、readonly が有効。
SelectDateWidgetは selectタグになるので、disabledにする必要がある。
こんな具合に、ターゲットのHTMLタグに応じて、readonlyにするかdisabledにするかは使い分けする。
最終更新:2013年01月22日 16:02
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。