newformsが変わってたよ。
いつの間にか、 newforms の form_for_model と form_for_instance がdeprecatedになってるよ。 変わりに ModelForm が出来ていて、 モデルに紐づかないフォームと同じ様に定義出来るようになったっぽい。
# vim: encoding=utf-8 :
from django import newforms as forms
from blog.models import Entry
class EntryForm(forms.ModelForm):
"""
エントリーに紐づくフォーム。
"""
class Meta:
model = Entry
基本はコレだけで良いみたい。 使い方は今までと変わらないのがありがたいっすなぁ。
>>> from blog.forms import EntryForm
>>> form = EntryForm()
>>> form.is_bound
False
>>> form.is_valid()
False
>>> del form
>>> data = {'title': u'test', 'slug': u'test', 'body': u'test'}
>>> form = EntryForm(data=data)
>>> form.is_bound
True
>>> form.is_valid()
True
>>> object = form.save()
>>> object
<Entry: test>
更新の時は、 __init__ に instance キーワードで渡してやると良いみたい。
>>> data = {'title': u'new title', 'slug': u'new-slug', 'body': u'new text'}
>>> # instanceキーワードで渡す。
>>> form = EntryForm(data=data, instance=object)
>>> form.is_bound
True
>>> form.is_valid()
True
>>> object = form.save()
>>> object
<Entry: new title>
バリデーションするフィールドを指定する fields は、 フォームの Meta クラスに移動したらしい。 それと、 exclude ってのも追加されたみたいで、 fields と逆の、バリデーションから省くフィールドを指定出来る。
# vim: encoding=utf-8 :
class EntryForm(forms.ModelForm):
"""
"""
class Meta:
# ターゲットとなるモデルを指定。
model = SomeModel
# バリデーションするフィールドを列挙。
fields = ('some', 'fields', 'here')
# バリデーションしないフィールドを列挙。
exclude = ('some', 'exclude', 'fields', 'here')
今までよりも少し拡張しやすくなったような。 フィールドのオーバーライドも出来るみたいなんだけども、 そこらへんはまだ試してないので、またおいおい。
- Posted at:
- 2007/12/23 17:26:02
- 2 Comments
- 1 TrackBack
- Trackback:
- http://humming.via-kitchen.com/2007/12/23/changed-newforms/trackback/
TrackBacks
[Django][Python][Mercurial][jQuery][KDE][CSS][その他]巡回 - 常山日記
Django Snippets: Breadcrumbs for flatpages Easier tags with parameters as dictionary values Blog: newformsが変わってたよ。 How to install Django with MySQL on Mac OS X Django, paths and URLs Using Unipath to Keep Things Portable Retrieving Selective Fiel
- Created at:
- 2007/12/24 17:12:08
Comments
kishi-r
おぉ〜変わってるのかぁ〜。
そういえば、アップデートしてないやw
って事でアップデートしたら、
色々エラーが出てしまったorz
Macのローカル環境で試してみたら、
X-MAC-JAPANESEでエラーが出るようになってしまったっす。
r6780でなら、
大丈夫だったのになぁ〜。
nobu
あれれ?X-MAC-JAPANESE?
それ、前にMac問題として話題になった気が。