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 はよいなぁ ... これは開発者にも、使う側にも優しい仕様。

Created at: 
2008/07/02 10:00:56

hfunai

これはよいものですね。
おそろしく便利。

Created at: 
2008/07/02 12:05:15