Models
Last updated
Last updated
models.py
はアプリケーション内で用いられるデータを定義しているものです.以下の3つからなります.
Subsession
Group
Player
1人のPlayerはグループの構成要員であり,subsessionの一部です.詳細は"Conceptual overview"でご確認ください.
models.py
の主な定義は,データベース上における列を定義するものです.以下のような表を作ってみましょう.
このようなテーブル構造は,以下のように定義することができます.
otree resetdb
を実行した時,models.py
を分析して,その通りにデータベーステーブルを作成します.(だから,models.py
に追加したり,削除したり,項目に変更を加えた際にresetdb
を実行する必要があります.)
利用可能なfields
のリストはDjangoドキュメンテーションのココにあります.最もよく使われるのはCharField
/TextField
(文字列),FloatField
(実数),BooleanField
(真偽値),IntegerField
とPositiveIntegerField
です.FloatField
とDecimalField
の違いを十分に理解しない限り,そして使う必要がない限りは使わないようにしてください.
さらに,oTreeはCurrencyField
があります.詳細はお金と利得を御覧ください.
あなたが定義したどんなフィールドも,初期値はNone
であり,何も定義されていません.もし,何らかの初期値を定義したいのであれば,initial =
を使ってください.
min
(最小値),max
(最大値)やchoices
(選択肢)を設定したいのであれば,コチラをごらんください.
Constants
クラスは,プレイヤーに共通するアプリケーションのパラメータと定数を設定するのに適したものです.
以下がアプリケーションに必要となる定数です.
name_in_url
:この名前は実験参加者のURLにおいて,アプリケーションを特定するために用いられます.例えば,public_goods
を設定したのであれば,実験参加者のURLは以下のようになります.http://otree-demo.herokuapp.com/p/zuzepona/public_goods/Introduction/1/
players_per_group
:(Groupsの欄で述べます.)
num_rounds
:(Roundsの欄で述べます.)
以下には,Subsession
オブジェクトの属性とメソッドのリストを示します.
session
の中にはsubsession
があります.詳細は"Self"に関する説明を確認してください.
現在のラウンド数を表示します.ただし,これは複数ラウンド実施するゲーム実験のみに関係します.(Constants.num_roundsで定義されます.)詳細は"Rounds"に関する説明を確認してください.
before_session_starts
はcreating_session
からotree-core1.3.2(June 2017)より変更したものです.しかしながら,before_session_starts
も下位互換性を保つために,現在でも利用可能です.
このメソッドは
before_session_starts
と呼ばれていたものです.詳細はそちらをご確認ください.
このメソッドは管理者が"create session"をクリックした際に実行されます.
creating_session
はplayer
,Groups
,subsessions
などのフィールドを初期値に戻すものです.例は以下のとおりです.
詳細ない情報はtreatmentsとgroup shufflingにあります.
もし,アプリケーションが1ラウンドだけであれば,creating_session
は一度だけ実行されます.もし,アプリケーションがNラウンドあれば,N回実行されます.すなわち,各subsessionに1つずつ必要となるのです.
この方法は各ラウンドの始まりには実行されます.そのために,ページの進行を止めるためには
after_all_players_arrive()
を使ってください.
Group matchingを確認してください.
Group matchingを確認してください.
Group matchingを確認してください.
subsessionにおける全てのグループのリストを返します.
subsessionにおける全てのプレイヤーのリストを返します.
詳細はPassing data between rounds or appsを確認してください.
詳細はPassing data between rounds or appsを確認してください.
詳細はPassing data between rounds or appsを確認してください.
詳細はPassing data between rounds or appsを確認してください.
以下には,Group
オブジェクトの属性とメソッドのリストを示します.
session
の中にはsubsession
があります.詳細は"Self"に関する説明を確認してください.
Groupsを確認してください.
Groupsを確認してください.
Groupsを確認してください.
Group matchingを確認してください.
詳細はPassing data between rounds or appsを確認してください.
詳細はPassing data between rounds or appsを確認してください.
詳細はPassing data between rounds or appsを確認してください.
詳細はPassing data between rounds or appsを確認してください.
以下には,Player
オブジェクトの属性とメソッドのリストを示します.
整数であり,1から始まります.複数人ゲームの場合,この数値はプレイヤー1に割り振られているのか,プレイヤー2に割り振られているのかなどを示します.
プレイヤーのそのラウンドにおける利得を示します.詳細はpayoffsを確認してください.
Groupsを確認してください.
Groupsを確認してください.
詳細はPassing data between rounds or appsを確認してください.
詳細はPassing data between rounds or appsを確認してください.
詳細はPassing data between rounds or appsを確認してください.
詳細はPassing data between rounds or appsを確認してください.
そのセッションの参加者の人数を示しています.
Configure sessionsとChoosing which treatment to playを確認してください.
session.varsを確認してください.
participants.varsを確認してください.
participants.labelsを確認してください.
セッションにおける実験参加者のIDを示しています.このIDはプレイヤーのid_in_subsession
と同じものです.
payoffsを確認してください.
payoffsを確認してください.
メソッド内にないコードは基本的には全てglobalであり,サーバ起動時に一度だけ実行されます.
一部の人々は新しいセッションが実行される度にコードが実行されると勘違いしているようです.例えば,コイントスで表が出るようなランダム確率を発生させたい人は以下のようなコードをmodels.pyに書くかもしれません.
サーバが起動した時にmodels.pyを起動します.そしてrandom.random()
を一度だけ実行します.そしてランダムな数字,例えば“0.257291”を評価します.
なぜならば,Constants
はglobal変数であり,“0.257291”が全てのセッションにおいて全プレイヤーに共有されます.
同じ理由で,以下のコードも起動しません.
この解決策は,creating_sessionのように,メソッドの内部でランダム変数を発生させることです.
name
age
is_student
John
30
False
Alice
22
True
Bob
35
False
...