Pat*_*Yan 7 python sqlalchemy jinja2 flask flask-sqlalchemy
我有User和Post的基本模型.在我的用户模型中,我有
posts = db.relationship('Post', backref='user', lazy='dynamic')
Run Code Online (Sandbox Code Playgroud)
但是,当我做的事情
return render_template('user.html', users=users)
Run Code Online (Sandbox Code Playgroud)
我想做的事情
{% for user in users %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.posts|length }}</td>
</tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.帖子是查询,而不是b/c的对象lazy='dynamic'.如果我更改lazy='joined',我可以执行上述操作,但随后我会在查询用户时为用户加载所有帖子.
我尝试添加.options(joinedload('posts'))到我的查询,但它说
InvalidRequestError:'User.posts'不支持对象填充 - 无法应用急切加载.
任何帮助表示赞赏.
只需删除lazy="dynamic"参数,您就可以joinedload毫无问题地使用.(请记住,当你这样做时,你会打开自己难以诊断的N + 1查询问题.如果你总是需要这些帖子,请joined改用它).
如果您需要所有行为(可查询,可加入和延迟加载),我建议查看此问题的答案,建议为动态查询添加另一个属性:
class User(db.Model):
posts = db.relationship('Post', backref='user')
class Post(db.Model):
# etc.
User.posts_query = db.relationship(Post, lazy='dynamic')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4794 次 |
| 最近记录: |