1対多のリレーション

月曜日, 1月 3rd, 2011 by

現在作成中のブログシステムで1対多のデータ構造を構築したので紹介しておく。1つの投稿(Entry)に対して、コメント(Comment)は複数設定できる。こういうデータ構造は、Commentオブジェクトに、Entryオブジェクトへの参照(db.ReferenceProperty)を持たせることで実現できる。collection_name=’comments’と指定しているため、EntryからCommentを取得する場合は、entry.commentsと記述すればよい。そして時系列に並べるためにorder(‘datetime’)でソートしている。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for comment in entry.comments.order('datetime'):
  pass

class Entry(db.Model):
  title = db.StringProperty(default = "")
  body = db.TextProperty(default = "")
  tags = db.ListProperty(db.Key)
  datetime = db.DateTimeProperty(auto_now_add = True)
  @property
  def formattedDatetimeInJST(self):
    return (self.datetime + datetime.timedelta(hours=9)).strftime("%Y-%m-%d %H:%M:%S")
  def tagStr(self):
    return " ".join([Tag.get(x).tag for x in self.tags])

class Comment(db.Model):
  comment = db.TextProperty(default = "")
  entry = db.ReferenceProperty(Entry, collection_name = 'comments')
  user = db.UserProperty()
  datetime = db.DateTimeProperty(auto_now_add = True)
  delpass = db.TextProperty()
  nickname = db.TextProperty()

Facebook comments:

comments

Leave a Reply


Get Adobe Flash player
single