form の使い方 validationエラー表示について

59 views
Skip to first unread message

Wataru Ishizuka

unread,
Sep 20, 2010, 7:19:36 PM9/20/10
to kay-users-ja
はじめまして、石塚と申します。
DjangoからKay入門中です。
(こちらへの投稿がNGだったらごめんなさい)

required=True のフォームを未入力で送信したときに,いつもは出るエラーが
表示されなくなる場合があって悩んでいます.
エラーのチェックはされていて、form.validate() は正しく帰ってきています。

もしお分かりになる方、ヒントや「もしかして」でも結構です。是非コメントお願いいたします。




#------------------------------------------------------
# view
def mng_supporter_edit( request, key ):
dic={}
obj = get_or_404( Supporter, key )
org_image = obj.file
if obj:
dic["obj"]=obj
form = Supporter_Form(instance=obj)
dic["form"]=form.as_widget()
if request.method == 'POST' and form.validate( request.form,
request.files ):
obj.save();
dic["message"]=msg
return render_to_response('genki/supporter.tmpl', dic )
if not form.is_valid:
dic["message"]=u"登録エラー"
return render_to_response('genki/supporter_edit.tmpl', dic )



#--------------------------------------------
# model
class Supporter(db.Model):
company = db.StringProperty(required=True, verbose_name=_(u'名前(社
名)') )
url = db.LinkProperty( required=False , verbose_name=_(u'URL') )
mail = db.EmailProperty( required=True , verbose_name=_(u'eメール') )
phone = db.PhoneNumberProperty( required=False , verbose_name=_(u'電話
番号') )
about = db.TextProperty( required=False , verbose_name=_(u'紹介文') )


#投稿ファイル
file = db.BlobProperty(required=False, verbose_name=_(u'画像(1MBま
で)') )
#sys
file_mime = db.StringProperty(required=False, verbose_name=_(u'file
mime type') )
file_name = db.StringProperty(required=False, verbose_name=_(u'file
name') )
writer = db.ReferenceProperty( reference_class=IK_User,
verbose_name=_(u"投稿者"),collection_name="100" )
created = db.DateTimeProperty(auto_now_add=True)
updated = db.DateTimeProperty(auto_now=True)

#----------------------------------------------
# form
class Supporter_Form(ModelForm):
class Meta:
model = Supporter
exclude = ( 'file_mime','file_name','created','updated','writer' )

Takashi MATSUO

unread,
Oct 4, 2010, 7:00:15 PM10/4/10
to kay-us...@googlegroups.com
松尾です。

どんな時にどのフィールドでおかしくなりますか?


あとコード見て気づいたところを少し指摘します。

obj.save() ではなく form.save() を使うのと
POST して save した後は redirect する方が良いかもです。

redirect 後の view とは flash で簡単なメッセージをやりとりできます。

# settings.py
MIDDLEWARE_CLASSES = (
'kay.utils.flash.FlashMiddleware',
)

# view
from kay.utils.flash (
get_flash, set_flash
)
# ..

def mng_supporter_edit( request, key ):
dic={}
obj = get_or_404( Supporter, key )
org_image = obj.file
if obj:
dic["obj"]=obj
form = Supporter_Form(instance=obj)
dic["form"]=form.as_widget()
if request.method == 'POST' and form.validate( request.form,
request.files ):

obj = form.save()
set_flash(msg)
return redirect(url_for('genki/display_supporter',
key=obj.key()))


if not form.is_valid:
dic["message"]=u"登録エラー"
return render_to_response('genki/supporter_edit.tmpl', dic )


--
Takashi Matsuo
matsuo....@gmail.com
Kay's daddy

2010/9/21 Wataru Ishizuka <wash...@gmail.com>:

> --
> このメールは Google グループのグループ「kay-users-ja」の登録者に送られています。
> このグループに投稿するには、kay-us...@googlegroups.com にメールを送信してください。
> このグループから退会するには、kay-users-ja...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/kay-users-ja?hl=ja からこのグループにアクセスしてください。
>
>

sim

unread,
Oct 4, 2010, 8:09:30 PM10/4/10
to kay-users-ja
原因はともかく(^^;)form.validateが正しく機能しているのであれば、

if request.method == 'POST:
if form.validate( request.form,request.files ):
...
else:
dic["message"]=u"登録エラー"

にしておいたら大丈夫ではないかと思うのですが。

"Wataru I."

unread,
Oct 4, 2010, 9:37:43 PM10/4/10
to kay-us...@googlegroups.com
松尾様

お世話になります。お忙しい中ご返答いただきましてありがとうございます。

もろもろご指摘ありがとうございます。
質問させていただきました件、解決いたしました。
flash も使ってみたいと思います。

基本的なことで煩わせて申し訳ありません!
今後ともよろしくお願いいたします。

p.s.
おかげさまで動くようになりました!
http://toda-genki-labo.appspot.com/


石塚


--
Wataru <wash...@gmail.com>

Reply all
Reply to author
Forward
0 new messages