如何使用ReferenceProperty访问模型中的项?

2024-09-29 02:24:30 发布

您现在位置:Python中文网/ 问答频道 /正文

这是my previous question的后续内容。在

我使用ReferenceProperty设置模型:

class User(db.Model):
    userEmail = db.StringProperty()

class Comment(db.Model):
    user = db.ReferenceProperty(User, collection_name="comments")
    comment = db.StringProperty(multiline=True)

class Venue(db.Model):
    user = db.ReferenceProperty(User, collection_name="venues")
    venue = db.StringProperty()

在数据存储中,我在“用户”下有以下条目:

^{pr2}$

场地下:

Entity Kind: Venue
Entity Key: ag1oZWxsby0xLXdvcmxkcgsLEgVWZW51ZRhVDA
ID: 85
venue (string): 5 star venue
user (Key): ag1oZWxsby0xLXdvcmxkcgoLEgRVc2VyGBUM
User: id=21

我试图在hw.py中显示项目,如下所示

query = User.all()
    results = query.fetch(10)
    self.response.out.write("<html><body><ol>")
    for result in results:
        self.response.out.write("<li>")
        self.response.out.write(result.userEmail)
        self.response.out.write(result.venues)
        self.response.out.write("</li>")
    self.response.out.write("</ol></body></html>")

这条线工作:

        self.response.out.write(result.userEmail)

但这条线行不通:

        self.response.out.write(result.venues)

但是as per vonPetrushev's answerresult.venues应该抓住与这个userEmail相关的{}。在

抱歉,如果这是令人困惑的:我只是试图访问链接到userEmail与{}的表。链接表是VenueComment。如何访问VenueComment中的项目?谢谢。在


Tags: selfdbmodelresponsecommentresultoutclass
1条回答
网友
1楼 · 发布于 2024-09-29 02:24:30

venues实际上是一个query对象。所以您需要获取或迭代它。在

尝试用循环替换self.response.out.write(result.venues)行:

query = User.all()
users = query.fetch(10)
self.response.out.write("<html><body><ol>")
for user in users:
    self.response.out.write("<li>")
    self.response.out.write(user.userEmail)
    self.response.out.write("<ul>")
    # Iterate over the venues
    for venue in user.venues:
        self.response.out.write("<li>%s</li>" % venue.venue)
    self.response.out.write("</ul></li>")
self.response.out.write("</ol></body></html>")

然而,这将不会很好地扩展。如果有10个用户,它将运行11个查询!请确保您正在使用Appstats查找类似这些性能问题。尽量减少RPC调用的次数。在

更好的解决方案可能是将用户的电子邮件非规范化并存储在场所类型上。你只需要一种方式来打印你需要的信息。在

相关问题 更多 >