入力欄の初期値を変数で設定したい

1,608 views
Skip to first unread message

kei yatima stratopolis

unread,
Mar 2, 2013, 5:56:05 AM3/2/13
to web2py...@googlegroups.com
入力欄の初期値を変数で設定したいのですが、うまくいきません。
htmlで言うと、form内のinputタグの、value属性のことです。

リファレンスを見て、フォームとバリデータ>SQLFORM>フォームの事前入力という項目を見つけ、form.vars.[フィールド名]に入れれば良いのかな、と思ったのですが、それらしい場所に書いてもうまくいきません(エラーは出ません)。
コントローラのform=の直後、ビューのformの前、後、途中と色々試しましたが、入力欄内には表示されませんでした。
jQueryで書き換えちゃおうかとも思いましたが、変数(具体的にはrequest.vars.hoge)を使いたいので無理ですかね。
解決策がちょっと皆目見当つかないので、どなたか解るかた、もしかしたらでも良いので助言お願いします。

一応今のコードはこんな感じです:

- xxx.py

def xxx():
    form = SQLFORM(db.foo)
    return dict(form=form)

- xxx.html

{{=form.custom.begin}}
{{form.vars.hoge = request.vars.fuga}}
  {{=form.custom.widget.hoge}}
  {{=form.custom.submit}}
{{=form.custom.end}}

中垣健志

unread,
Mar 2, 2013, 6:27:23 AM3/2/13
to web2py...@googlegroups.com
こんにちは。

ドキュメントのこの部分が参考にならないでしょうか?

「フォームの事前入力」
http://web2py.com/books/default/chapter/33/07#フォームの事前入力

2013年3月2日 19:56 kei yatima stratopolis <tarakom...@gmail.com>:
> --
> このメールは Google グループのグループ「web2py japan」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、web2py-japan...@googlegroups.com
> にメールを送信します。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>
>



--
NAKAGAKI Kenji
mail:nakak...@gmail.com
twitter:@nakaken0629
facebook:http://www.facebook.com/nakaken0629
Google+:https://plus.google.com/u/0/100640667380255256796/posts

中垣健志

unread,
Mar 2, 2013, 6:39:36 AM3/2/13
to web2py...@googlegroups.com
ごめんなさい、提示した個所はすでに読まれていたんですね。

該当処理でrequest.vars.フィールド名に名前を入れた後に、ビュー側で次の一文を使うとSQLFORMオブジェクトの中身が確認できるので、何かわかるかもしれません。

{{=BEAUTIFY(request.vars)}}

あるいは作られているアクションがSQLFORMを使ってデータベースからデータを読み込んでいるのであれば、モデルオブジェクトの中で初期値を作ってしまうという方法もできるかもしれません。

2013年3月2日 20:27 中垣健志 <nakak...@gmail.com>:

kei yatima stratopolis

unread,
Mar 2, 2013, 10:45:10 AM3/2/13
to web2py...@googlegroups.com
いえいえ、お気になさらず。
助言ありがとうございます。

{{=BEAUTIFY(request.vars)}} と{{=BEAUTIFY(form.vars)}} 試してみました。
form.varsに値を受け渡すのはちゃんと出来てるんですよね。
しかし、なぜか入力欄内には表示されないです。

もう片方の、モデル内でdefaultを設定するのは、定数なら出来ました。この方法なら入力欄内にも表示されますね!
でもビューに書くべきような変数を指定したいんですよね。そんなこと出来るんでしょうか。
…と書きつつ普通のフィールドで試してみたら、出来るんですね。驚きました。
しかし使いたいのはdatetime型のフィールドなので、変数がstrだと思われてエラーになってしまうのです。泣
バリデータを除けば動かないことはないですが、それはそれで困りますし。

ちなみに、入力欄に定数を表示させた時、{{=BEAUTIFY(form.vars)}} を見ると、その定数になっていないんですよね。
そもそも「フォームの事前入力」 というのは、入力欄に表示させることとは違うんでしょうかね。




2013年3月2日土曜日 20時39分36秒 UTC+9 中垣健志:
>> このグループから退会し、メールの受信を停止するには、web2py-japan+unsubscribe@googlegroups.com
>> にメールを送信します。
>> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>>
>>
>
>
>
> --
> NAKAGAKI Kenji
> twitter:@nakaken0629
> facebook:http://www.facebook.com/nakaken0629
> Google+:https://plus.google.com/u/0/100640667380255256796/posts



--
NAKAGAKI Kenji

kato

unread,
Mar 2, 2013, 2:24:06 PM3/2/13
to web2py...@googlegroups.com
こんにちは

ご質問のメールを読んで、いまいち何をしたいのか理解できていませんが、回答してみます。

もう片方の、モデル内でdefaultを設定するのは、定数なら出来ました。

SQLFORMを使用するならモデル定義などで、defaultで指定するのが初期値設定では一番簡単です。
ただ画面によって設定する初期値を変えたい場合など、次のようにコントローラ内でも記述可能です。


def sqlform():
    import datetime
    db.foo.reg_date.default=datetime.datetime.now()
    form = SQLFORM(db.foo).process()
    return dict(form=form)

サンプルコードは、foo テーブルの reg_date フィールドの初期値を現在の日時にします。
こんな回答で宜しいでしょうか?。

KATO


2013年3月2日 12:45 kei yatima stratopolis <tarakom...@gmail.com>:
このグループから退会し、メールの受信を停止するには、web2py-japan...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
 
 

kei yatima stratopolis

unread,
Mar 3, 2013, 3:47:29 AM3/3/13
to web2py...@googlegroups.com
勉強不足で質問もわかりづらくすみません。

なるほど!コントローラでも指定できるんですね!
勝手にモデル内でしか出来ないものとばかり…早とちりをしていました
自分がやりたかったのはまさにこれです。ありがとうございます!


2013年3月3日日曜日 4時24分06秒 UTC+9 kato:
Reply all
Reply to author
Forward
0 new messages