1
在我目前的項目中,我有兩個模型,版本和評論。兩者之間有一對多的關係;每個版本可以有很多評論和評價模型具有的ReferenceProperty記錄它屬於哪個版本:是否有某個ReferenceProperty可能不會生成反向引用的原因?
class Comment(db.Model):
version = db.ReferenceProperty(version.Version, collection_name="comments")
的問題是該版本的情況下都沒有得到意見,因爲我所期望財產。 According to the docs,我應該在每個版本上獲得一個automagical屬性,該屬性是一個查詢,該查詢返回其版本設置爲有問題的版本實例的所有Comment實例。似乎不適用於我的代碼。
我知道的ReferenceProperty設置正確,因爲我可以得到與此查詢的評論:
comments = comment.Comment.all().filter('version = ', self).order('-added_on').fetch(500)
但這並不:
comments = self.comments.order('-added_on').fetch(500)
它崩潰了,因爲自己沒有財產評論。
下面是兩種型號的完整代碼。有沒有人有任何想法爲什麼back-reference屬性沒有給我的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)
嗯,我會死的。這是愚蠢的收藏名稱。我真的不認爲基本問題是我用這個任務覆蓋了屬性,因爲我沒有分配self.comments,只是註釋,但是仍然改變集合名稱的辦法。感謝您將我推向明顯的答案,@Peter。我完全阻止了自己。 – 2010-07-13 23:50:34