2010-07-13 36 views
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) 

回答

3

看起來要覆蓋名爲comments用自己的財產的評論自動魔法的屬性,在這條線:

comments = self.comments.order('-added_on').fetch(500) 

如果更改collection_name參數會發生什麼評論模型中的評論爲「comments_set」,然後將上面的行更改爲:

comments = self.comments_set.order('-added_on').fetch(500) 
+0

嗯,我會死的。這是愚蠢的收藏名稱。我真的不認爲基本問題是我用這個任務覆蓋了屬性,因爲我沒有分配self.comments,只是註釋,但是仍然改變集合名稱的辦法。感謝您將我推向明顯的答案,@Peter。我完全阻止了自己。 – 2010-07-13 23:50:34