49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
from sqlalchemy import and_
|
|
|
|
from applications.extensions import db
|
|
|
|
|
|
class ModelFilter:
|
|
"""
|
|
orm多参数构造器
|
|
"""
|
|
filter_field = {}
|
|
filter_list = []
|
|
|
|
type_exact = "exact"
|
|
type_vague = "vague"
|
|
|
|
def __init__(self):
|
|
self.filter_field = {}
|
|
self.filter_list = []
|
|
|
|
def exact(self, field_name, value):
|
|
"""
|
|
准确查询字段
|
|
:param field_name: 模型字段名称
|
|
:param value: 值
|
|
"""
|
|
if value and value != '':
|
|
self.filter_field[field_name] = {"data": value, "type": self.type_exact}
|
|
|
|
def vague(self, field_name, value: str):
|
|
"""
|
|
模糊查询字段
|
|
:param field_name: 模型字段名称
|
|
:param value: 值
|
|
"""
|
|
if value and value != '':
|
|
self.filter_field[field_name] = {"data": ('%' + value + '%'), "type": self.type_vague}
|
|
|
|
def get_filter(self, model: db.Model):
|
|
"""
|
|
获取过滤条件
|
|
:param model: 模型字段名称
|
|
"""
|
|
for k, v in self.filter_field.items():
|
|
if v.get("type") == self.type_vague:
|
|
self.filter_list.append(getattr(model, k).like(v.get("data")))
|
|
if v.get("type") == self.type_exact:
|
|
self.filter_list.append(getattr(model, k) == v.get("data"))
|
|
return and_(*self.filter_list)
|