SQLAlchemy多对多关系中仅获取ID?Jinja模板对比问题
解决Jinja模板中多对多关系的用户ID匹配问题
方案1:直接访问User对象的id属性
你之前的问题根源是把整个User对象和整数ID做对比,只要在遍历的时候访问对象的id属性就能完成匹配:
{% for cmt in forum.comments %} {# 生成评论内容的逻辑 #} {% for liked_user in cmt.likedby %} {% if user.id == liked_user.id %} {# 这里写用户已点赞的处理逻辑 #} {% endif %} {% endfor %} {% endfor %}
方案2:用生成器表达式简化判断(避免嵌套循环)
如果不想写两层循环,可以用Jinja支持的生成器表达式,直接判断当前用户ID是否在点赞用户ID集合里:
{% for cmt in forum.comments %} {# 生成评论内容的逻辑 #} {% if user.id in (liked_user.id for liked_user in cmt.likedby) %} {# 用户已点赞的处理逻辑 #} {% endif %} {% endfor %}
方案3:在模型中添加属性返回ID列表(若允许修改Python代码)
如果可以修改模型代码,给Comment类加一个只读属性,提前把点赞用户的ID整理成列表,模板里用起来更简洁:
class Comment(db.Model): id = db.Column(db.Integer, primary_key=True) @property def liked_user_ids(self): return [user.id for user in self.likedby]
然后模板里直接调用这个属性:
{% for cmt in forum.comments %} {# 生成评论内容的逻辑 #} {% if user.id in cmt.liked_user_ids %} {# 用户已点赞的处理逻辑 #} {% endif %} {% endfor %}
内容的提问来源于stack exchange,提问作者Randall Barber
相关产品推荐
相关产品推荐

