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

标签 python google-app-engine

在我当前的项目中,我有两个模型,版本和评论。两者之间是一对多的关系;每个Version可以有很多Comment,Comment模型有一个ReferenceProperty来记录它属于哪个Version:

class Comment(db.Model):
    version = db.ReferenceProperty(version.Version, collection_name="comments")

问题是 Version 的实例没有像我预期的那样获得comments 属性。 According to the docs ,我应该在每个 Version 上获得一个 automagical 属性,该属性是一个查询,返回所有将其版本设置为相关 Version 实例的 Comment 实例。似乎不适用于我的代码。

我知道 ReferenceProperty 设置正确,因为我可以使用此查询获取评论:

        comments = comment.Comment.all().filter('version = ', self).order('-added_on').fetch(500)

但这并不:

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

它崩溃了,因为 self 没有属性注释。

下面包含两个模型的完整代码。有谁知道为什么没有为我的 Verson 实例提供反向引用属性?

来自版本.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)

如果将 Comment 模型中的 collection_name 参数更改为“comments_set”,然后将上面的行更改为:

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

关于python - ReferenceProperty 是否有可能不生成反向引用的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3240505/

相关文章:

python - 从文本文件打印链接会在中间产生 "line gap"

java - 为 JDO 实体选择某个 "column"

python - NDB 模型使用数组过滤器查询键 ID

python - 附加到范围函数

java - AVRO - 支持联合记录类型的复杂记录

python - 根据Python中defaultdict的特定列的值对csv列进行排序

google-app-engine - API 调用 datastore_v3.Put() 需要比可用配额更多的配额

python - 如何在 Google App Engine 上设置暂存环境

google-app-engine - 如何找到两年前部署的谷歌应用引擎源代码

python - Python 3 中的列表成员资格检查