django.newformsメモ
Django -0.96から搭載された newforms 。 個人的にはコードがすっきり書けて良いと思うものの、 field とか widget を変えたい時にソースが膨れ上がってしまい、ちょっと DRY じゃ無い気がしてた。
Django -0.96の django.db.models.fields だとこうなってる。
def formfield(self, **kwargs):
"Returns a django.newforms.Field instance for this database Field."
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
defaults.update(kwargs)
# ココがべた書き。
return forms.CharField(**defaults)
これだと field 変えたい時にはrequiredとかの設定をもう一回自分で書かなきゃなんない。 すでに一度 model に定義してるのに。
これはさすがに無いだろ。と思って TRUNK を見るとこうなってる。
# 引数にform_classが追加されてる。
def formfield(self, form_class=forms.CharField, **kwargs):
"Returns a django.newforms.Field instance for this database Field."
defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
if self.choices:
defaults['widget'] = forms.Select(choices=self.get_choices())
defaults.update(kwargs)
# 動的に生成。
return form_class(**defaults)
これだと newforms.form_for_model の formfield_callback から簡単に上書き出来るし、設定もちゃんと受け渡される。良いね。素敵。
unicodeブランチのマージとか、色々変更掛かってるみたいだし、早く0.97出てほしい。
- Posted at:
- 2007/08/04 22:16:32
- 0 Comments
- 0 TrackBacks
- Trackback:
- http://humming.via-kitchen.com/2007/08/04/django-newforms-memo/trackback/
TrackBacks
まだ登録されていません。
Comments
まだ登録されていません。