代码之家  ›  专栏  ›  技术社区  ›  Adam Crossland

ReferenceProperty是否有可能不生成反向引用的原因?

  •  1
  • Adam Crossland  · 技术社区  · 14 年前

    在我当前的项目中,我有两个模型,版本和注释。两者之间存在一对多的关系;每个版本可以有许多注释,并且注释模型有一个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)
    
    1 回复  |  直到 14 年前
        1
  •  3
  •   Peter Recore    14 年前

    看起来您正在覆盖名为 comments 你自己的财产评论,在这行:

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

    如果将注释模型中的collection\u name参数更改为“comments\u set”,然后将上面的行更改为:

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