Python ReferenceProperty不生成反向引用是否有原因?

Python ReferenceProperty不生成反向引用是否有原因?,python,google-app-engine,Python,Google App Engine,在我当前的项目中,我有两个模型,版本和注释。两者之间存在一对多的关系;每个版本都可以有许多注释,注释模型有一个ReferenceProperty来记录它所属的版本: class Comment(db.Model): version = db.ReferenceProperty(version.Version, collection_name="comments") 问题是版本的实例没有像我预期的那样获得comments属性,我应该在每个版本上获得一个autologic属性,该属性是一个

在我当前的项目中,我有两个模型,版本和注释。两者之间存在一对多的关系;每个版本都可以有许多注释,注释模型有一个ReferenceProperty来记录它所属的版本:

class Comment(db.Model):
    version = db.ReferenceProperty(version.Version, collection_name="comments")
问题是版本的实例没有像我预期的那样获得comments属性,我应该在每个版本上获得一个autologic属性,该属性是一个查询,返回所有将其版本设置为相关版本实例的注释实例。似乎对我的代码不起作用

我知道ReferenceProperty设置正确,因为我可以通过此查询获取注释:

        comments = comment.Comment.all().filter('version = ', self).order('-added_on').fetch(500)
但这并不是:

        comments = self.comments.order('-added_on').fetch(500)
它崩溃是因为self没有属性注释

下面包含了这两个模型的完整代码。有人知道为什么不将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)

看起来您正在用自己的属性注释覆盖名为
comments
的自动逻辑属性,如下所示:

comments = self.comments.order('-added_on').fetch(500)
如果将注释模型中的collection\u name参数更改为“comments\u set”,然后将上述行更改为:

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

好吧,我会倒霉的。这是一个愚蠢的收藏名称。我真的不认为根本的问题是我用那个赋值覆盖了属性,因为我没有赋值给self.comments,只是赋值,但更改集合名称还是奏效了。彼得,谢谢你把我推向了显而易见的答案。我把自己完全挡在了石头上。