flask-sqlalchemy如何实现逻辑删除功能

如下,这个是拥有子级的菜单实体:
class SysMenu(db.Model):
“”“系统菜单”“”
tablename = f’sys_menus’
id = db.Column(db.Integer, primary_key=True)
pid = db.Column(db.Integer, db.ForeignKey(f’sys_menus.id’), index=True)
title = db.Column(db.String(20)
is_del = db.Column(db.Integer, default=0)
sort = db.Column(db.Integer, default=0)
add_time = db.Column(db.DateTime, default=datetime.now)

parent = db.relationship('SysMenu', back_populates='subs', remote_side=[id])
subs = db.relationship('SysMenu', back_populates='parent', cascade='all',
                       order_by="desc(SysMenu.sort)")

=======
其中subs 关联字段可以获得子菜单的列表,这个正常用没有什么问题
当SysSubMenu有个逻辑删除的字段 is_del, 当 is_del = 1 时,表示删除状态,这时 is_del = 1的记录,如何不出现在 subs 中呢,即 db.relationship 这个是否能过滤掉 is_del的字段值。

    总结:如何让 db.relationship 过滤掉 is_del = 1 的数据,以实现逻辑删除的目的。

两种方式:

  • 创建一个单独的方法/属性来返回过滤删除记录后的记录列表
  • 自定义 query 类过滤删除的记录

第二种方式可以参考下面的文章和帖子:

下次提问请注意排版(并设置正确分类),不要弄得乱七八糟无法阅读。代码块可以使用三个连续反引号标记,或者使用编辑器的按钮创建。具体可以参考论坛置顶主题。

谢谢,学习了,下次会注意下排版