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_modelformfield_callback から簡単に上書き出来るし、設定もちゃんと受け渡される。良いね。素敵。

unicodeブランチのマージとか、色々変更掛かってるみたいだし、早く0.97出てほしい。

Posted at: 
2007/08/04 22:16:32
0 Comments
0 TrackBacks
Tags: 
Django
Python
Trackback: 
http://humming.via-kitchen.com/2007/08/04/django-newforms-memo/trackback/

TrackBacks

まだ登録されていません。

Comments

まだ登録されていません。

Add Comment

Add Comment