newformsが変わってたよ。

いつの間にか、 newformsform_for_modelform_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
Tags: 
Django
Python
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でなら、
大丈夫だったのになぁ〜。

Created at: 
2007/12/25 01:10:24

nobu

あれれ?X-MAC-JAPANESE?

それ、前にMac問題として話題になった気が。

Created at: 
2007/12/25 02:42:31

Add Comment

Add Comment