以下两种模式:
class Comment(db.Model):
__tablename__ = 'comments'
id = db.Column(db.Integer, primary_key=True)
author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
comments = db.relationship('Comment', backref='author', lazy='dynamic')
user = User.query.get_or_404(id)
确保用户存在,并且尚未发布任何评论。
然后在模板文件中
{% if user.comments %}
do stuff
{% else %}
no comments yet
{% endif %}
if-else条件无法进入else分支。
如果我使用以下代码:
comments = Comment.query.filter_by(author_id=user.id).all()
{% if comments %}
do stuff
{% else %}
no comments yet
{% endif %}
可以输出
no comments yet
为什么user.com没有用?
答案 0 :(得分:0)
很容易解释为当你写if user.comments
时它总是为真,因为它不是无,即使是空的:
>>> user.comments
<sqlalchemy.orm.dynamic.AppenderBaseQuery object at 0x7fa6e0b456a0>
>>> user.comments.all()
[]
你看,即使查询什么都没有返回,它的类型也不是None,它是一个sqlalchemy对象:
>>> type(user.comments)
<class 'sqlalchemy.orm.dynamic.AppenderBaseQuery'>
也许您可以直接使用len()或用户user.comments.all()或更好:
{% if user.comments.count() > 0 %}
do stuff
{% else %}
no comments yet
{% endif %}