daemonfreaks.com

Djangoの新規作成の汎用ビューでフォームのデフォルト値を設定したい

posted by jun-g at Sun, 07 Oct 2007 20:32 JST

汎用ビューの勉強がてら、views.pyを一切書かずにツールを作ってみるか、と思って試してみてるんやけど、いきなり躓いた。

作っているツールはちょっとしたメモ用のツールで、画面上、内容と日時を入力するテキストフィールドが表示される。この日時のフィールドにデフォルト値として現在日時を設定しておきたいんやけど、やり方がわからなかった。一応調べたとこまでメモ。

とりあえずdjango.views.generic.create_update.create_objectのソースを読んでみたところ、マニピュレータを自作して、flatten_data()メソッドを実装すれば良さそうな感じがしたので、さらにdjango.db.models.manipulatorsを読んで、モデルクラス内に以下のクラスを追加してみた。

class AddManipulator(models.manipulators.AutomaticAddManipulator):
    def flatten_data(self):
        now = datetime.now()
        return dict(
            rec_time_date = now.strftime('%Y-%m-%d'),
            rec_time_time = now.strftime('%H:%M:%S'))

しかし、ここで定義したクラスはまったく使われていない様子。python manage.py shellを起動して確認してみたところ、モデルのAddManipulatorは<class 'django.db.models.manipulators.AddManipulator'>を参照していたので、自分で定義したAddManipulatorクラスは自動マニピュレータで上書きされているっぽい。

ドキュメント見ても「このビューは、 Django モデルに付属の自動マニピュレータを使います。」って書いてあるしなー…。やっぱり汎用ビューを止めてviews.pyを書いたほうがいいのか…?