Django の管理画面で特定のモデルの特定のフィールドのtextareaだけcolsやrowsを変えたい
投稿日:2008/07/02 03:40:45
つまるところ Django の管理画面の textarea は結構ちっちゃめに設定されてます。
しかもそれを変更するのは、案外というかかなり大変なことになるようで困りました。
ちなみに Safari3 からは、textarea をリサイズする機能が備わっているため困らないでしょう。
ちょっと別な話ですが、特定のアプリの特定のクラスだけリスト表示、詳細表示を変更したいっていうのは簡単です。
例えば、 poll というアプリの Poll クラスだけ詳細・変更フォームを変更したい場合は、
TEMPLATE_DIR 内に admin/poll/poll/ というディレクトリを作成して、その中に、
/usr/lib/python2.5/site-packages/django/contrib/admin/templates/admin あたりにあるchange_form.htmlをコピーします。
んで、それを変更すると、 poll クラスの詳細・変更フォームだけを変更することができます。
今回のケースだとこれだけでは不十分です。
ソースを追いかけていくと、最終的に、django/oldforms/__init__.py の各クラスが render というメソッドを持っていて、
そこで html を生成しています。要するにお手上げですw
結果として、たどり着いたのは Javascript です。(個人的には最終手段だとおもってますが)
Django のソースも HTML も 1 行も書き換えることなく(それはうそですね。下に書いたコード追加しないとだめです。)変更できます。
今回、 Google の AJAX Libraries API を使って jquery を読み込んでみました。
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
<!--
google.load("jquery", "1.2.6");
google.setOnLoadCallback(function(){
$('input[@type=text]').attr('size', 100);
$('textarea').attr('rows', 30);
$('textarea').attr('cols', 120);
});
//-->
</script>
これを、さっきの change_form.html に書けば完了です。とりあえず、input type="text" と textarea を拡張してみました。
とりあえず現状だとこれが一番楽そうなんだけど、 newforms admin ではどうなんだろうか。その辺はまた調べてみます
- Posted at:
- 2008/07/02 03:40:45
- 2 Comments
- 0 TrackBacks
- Tags:
- Django
- Trackback:
- http://blog.monospace.jp/2008/07/02/django_admin_modify_widget/trackback/
TrackBacks
まだ登録されていません。
Comments
スパムコメントしか来ないのでコメント欄はリードオンリーです。コメントはTwitterなどでおねがいします。
voluntas
google.load はよいなぁ ... これは開発者にも、使う側にも優しい仕様。
hfunai
これはよいものですね。
おそろしく便利。