在我当前的项目中,我有两个模型,版本和注释。两者之间存在一对多的关系;每个版本可以有许多注释,并且注释模型有一个ReferenceProperty来记录它属于哪个版本:
class Comment(db.Model):
version = db.ReferenceProperty(version.Version, collection_name="comments")
问题是版本的实例没有获得
如我所料。
According to the docs
,我应该在每个版本上获得一个autologic属性,该属性是一个返回所有注释实例的查询,这些注释实例的版本设置为有问题的版本实例。似乎对我的代码不起作用。
comments = comment.Comment.all().filter('version = ', self).order('-added_on').fetch(500)
但这并不是:
comments = self.comments.order('-added_on').fetch(500)
它崩溃是因为self没有属性注释。
下面包含了这两个模型的完整代码。有人知道为什么反向引用属性没有给我的Verson实例吗?
从version.py:
from google.appengine.ext import db
import piece
class Version(db.Model):
parent_piece = db.ReferenceProperty(piece.Piece, collection_name="versions")
note = db.TextProperty()
content = db.TextProperty()
published_on = db.DateProperty(auto_now_add=True)
def add_comment(self, member, content):
import comment
new_comment = None
try:
new_comment = comment.Comment()
new_comment.version = self
new_comment.author = member
new_comment.author_moniker = member.moniker
new_comment.content = content
new_comment.put()
except:
# TODO: handle datastore exceptions here
pass
return new_comment
def get_comments(self):
import comment
comments = None
try:
comments = comment.Comment.all().filter('version = ', self).order('-added_on').fetch(500)
except:
pass
从comment.py:
import version
import member
from google.appengine.ext import db
class Comment(db.Model):
version = db.ReferenceProperty(version.Version, collection_name="comments")
author = db.ReferenceProperty(member.Member)
author_moniker = db.StringProperty()
author_thumbnail_avatar_url = db.StringProperty()
content = db.TextProperty()
added_on = db.DateProperty(auto_now_add=True)