gpt4 book ai didi

python - 如何获取 Flask-SQLAlchemy 对象以加载 Jinja 模板的关系子项?

转载 作者:太空狗 更新时间:2023-10-29 21:46:30 27 4
gpt4 key购买 nike

我有 User 和 Post 的基本模型。在我的用户模型中,我有

posts = db.relationship('Post', backref='user', lazy='dynamic')

但是,当我做类似的事情时

return render_template('user.html', users=users)

我想做这样的事情

{% for user in users %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.posts|length }}</td>
</tr>
{% endfor %}

不幸的是,这不起作用。 Posts 是一个查询,而不是 lazy='dynamic' 的对象 b/c。如果我更改 lazy='joined',我可以执行上述操作,但它会在我查询用户时为用户加载所有帖子。

我尝试将 .options(joinedload('posts')) 添加到我的查询中,但它说

InvalidRequestError: 'User.posts' does not support object population - eager loading cannot be applied.

感谢任何帮助。

最佳答案

只需删除 lazy="dynamic" 参数,您就可以毫无问题地使用 joinedload。 (请记住,当您这样做时,您将面临难以诊断的 N+1 查询问题。如果您始终需要这些帖子,请改用 joined)。

如果您需要所有行为(可查询、可连接和延迟加载),我建议查看 this question 的答案,这建议为动态查询添加另一个属性:

class User(db.Model):
posts = db.relationship('Post', backref='user')

class Post(db.Model):
# etc.

User.posts_query = db.relationship(Post, lazy='dynamic')

关于python - 如何获取 Flask-SQLAlchemy 对象以加载 Jinja 模板的关系子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22019567/

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