libro
www.tuyano.com
PythonによるGoogle App Engine(GAE)プログラミング入門

複数モデルの連携処理 (2/6)

作成:2010-01-08 10:46
更新:2010-05-10 21:53

■2つのモデルを設計する

では、実際に簡単なサンプルを作って、モデルの連携処理をやってみましょう。ここでは、メンバー制のメッセージ投稿システムを考えてみます。メンバーを登録し、それぞれがメッセージを投稿できる、というものです。

モデルとしては、メンバー情報のモデルと、メッセージのモデルの2つが必要となります。では、これらを用意しましょう。ソースコードは、以下のリストに掲載したようになります。

まずは、MemberDataから見てください。ここでは、「user」「name」「tel」「comment」といったプロパティを用意しました。最初の「user」は、ログインしているUserのインスタンスを保管するものです。メンバー登録をする際、個人の識別にGoogleアカウントを利用しよう、というわけです。他、ここでのメンバーの名前や電話番号、コメントなどを保管できるようにしています。

もう1つのMessageDataが、今回のポイントです。ここでは「member」「message」「time」プロパティが用意されています。messageはわかりますね? これが、送信されたメッセージを保管するものになります。

memberは、このメッセージを送信したメンバーのMemberDataを保管するものです。ここにはrequiredの他に、以下の重要な引数が用意されています。

reference_class――このプロパティに保管するクラスを指定します。これは必ず用意するものと考えてください。
collection_name――これは、保管するクラス側に、「それを参照しているオブジェクト」をまとめて取得するためのプロパティを作成するためのものです。これについては後で改めて触れます。

他、時間を保持するのに「db.DateTimeProperty」というのを使っていますね。これは、日付と時刻の両方を保持するプロパティです。時間関係は、この他にDateProperty、TimePropertyといったものがあります。引数では、「auto_now_add」というものが用意されていますが、これをTrueにすると、オブジェクト作成時に自動的にその時刻が設定されるようになります。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

class MemberData(db.Model):
  user = db.UserProperty(required=True)
  name = db.StringProperty(required=True,multiline=False)
  tel = db.StringProperty(multiline=False)
  comment = db.StringProperty(multiline=False)
  
class MessageData(db.Model):
  member = db.ReferenceProperty(required=True,reference_class=MemberData, collection_name='messages')
  message = db.StringProperty(required=True,multiline=False)
  time = db.DateTimeProperty(auto_now_add=True)
※関連コンテンツ

「PythonによるGoogle App Engine(GAE)プログラミング入門」に戻る