22

フィールド is_deleted を持つモデルがあり、.filter および .filter_by に渡されるフィルタリング引数に加えて、このモデルのすべての形式のクエリを常に is_deleted=False でフィルタリングする必要があります。

Django では、通常はマネージャーをオーバーライドして独自のフィルタリングを追加しますが、SQLAlchemy については助けが必要です。

アップデート:

私は最終的に次のことをしました:

class CustomQuery(Query):
    def __new__(cls, *args, **kwargs):
        if args and hasattr(args[0][0], "is_deleted"):
            return Query(*args, **kwargs).filter_by(is_deleted=False)
        else:
            return object.__new__(cls)
session = scoped_session(sessionmaker(query_cls=CustomQuery))

それは機能しますが、後でフィールドが増えた場合は、さらに条件を追加する必要があると思います。モデルレベルでこれを行う方法が必要です。

4

1 に答える 1