我想创建一个稍微复杂一点的filter_by-这样,如果我传递了一些kwargs和值,其中一些是None,则这些不包含在过滤器中。我不确定如何filter_by全局覆盖。
我真正想要的是:
data = {'is_enabled': True, 'city': 'SF', 'address': None}
query.smart_filter(data)
Run Code Online (Sandbox Code Playgroud)
并且smart_filter排除“地址”字段,并使用“ is_enabled”和“ city”值调用filter_by。
有什么办法可以建立这样的东西吗?
子类sqlalchemy.orm.Query,添加您的smart_filter方法,然后将新类传递给您sessionmaker。遵循这些原则:
class MyQuery(Query):
def smart_filter(self, **kwargs):
kwargs = {key: value for key, value in kwargs.items()
if value is not None}
return self.filter_by(**kwargs)
Session = sessionmaker(query_cls=MyQuery)
Run Code Online (Sandbox Code Playgroud)