フォームに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