現在作成中のブログシステムで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() |