gpt4 book ai didi

python - 在这种情况下如何正确使用 ndb KeyProperty?

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:12 25 4
gpt4 key购买 nike

我有两个模型:

class User(ndb.Model):
email = ndb.StringProperty(required=True)
name = ndb.StringProperty(required=True)

class Post(ndb.Model):
created = ndb.DateTimeProperty(auto_now_add=True)
message = ndb.TextProperty(required=True)
user = ndb.KeyProperty(kind=User)

如果我想循环遍历 Post 模型中的一些帖子。我将如何访问用户模型中的“名称”字段?例如:

for post in posts:
print post.message
print post.user.name

所以我猜最后一行不正确。我尝试搜索但无法弄清楚。并补充说。有没有办法在 Jinja2 模板中访问该信息?

最后,我做错了吗?假设有 50 个帖子。我有 1 个查询来获取这 50 个帖子。访问用户模型上的“名称”字段是否会成为每次循环时的附加查询?那么51个查询??如果是这样,是否最好不要使用 KeyProperty 而只在每个帖子中存储用户数据(即使我有更多数据,如头像、user_id 等)?

最佳答案

如果我没记错的话,KeyProperty 会返回一个 ndb.Key。获得 key 后,很容易获得模型实例 (key.get())。因此,在您的示例中,您将:

print post.user.get().name

就在 jinja 模板中访问它而言——当然,它就像这样:

{% for post in posts %} 
{{ post.message }}
{{ post.user.get().name }}
{% endfor %}

是的,这将为您拥有的每个 key 与数据存储交互一次。如果您愿意,可以将其分解为一个数据存储交互:

keys = [p.user for p in posts]
users = ndb.get_multi(keys)
user_posts = zip(users, posts)

然后在您的神社模板中:

{% for user, post in user_posts %}
{{ post.message }}
{{ user.name }}
{% endfor %}

关于python - 在这种情况下如何正确使用 ndb KeyProperty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com