diff --git a/applications/common/helper.py b/applications/common/helper.py index 7525fc7..563cb77 100644 --- a/applications/common/helper.py +++ b/applications/common/helper.py @@ -11,7 +11,12 @@ class ModelFilter: filter_list = [] type_exact = "exact" + type_neq = "neq" + type_greater = "greater" + type_less = "less" type_vague = "vague" + type_contains = "contains" + type_between = "between" def __init__(self): self.filter_field = {} @@ -26,6 +31,33 @@ class ModelFilter: if value and value != '': self.filter_field[field_name] = {"data": value, "type": self.type_exact} + def neq(self, field_name, value): + """ + 不等于查询字段 + :param field_name: 模型字段名称 + :param value: 值 + """ + if value and value != '': + self.filter_field[field_name] = {"data": value, "type": self.type_neq} + + def greater(self, field_name, value): + """ + 大于查询字段 + :param field_name: 模型字段名称 + :param value: 值 + """ + if value and value != '': + self.filter_field[field_name] = {"data": value, "type": self.type_greater} + + def less(self, field_name, value): + """ + 大于查询字段 + :param field_name: 模型字段名称 + :param value: 值 + """ + if value and value != '': + self.filter_field[field_name] = {"data": value, "type": self.type_less} + def vague(self, field_name, value: str): """ 模糊查询字段 @@ -35,6 +67,42 @@ class ModelFilter: if value and value != '': self.filter_field[field_name] = {"data": ('%' + value + '%'), "type": self.type_vague} + def left_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 right_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 contains(self, field_name, value: str): + """ + 包含查询字段 + :param field_name: 模型字段名称 + :param value: 值 + """ + if value and value != '': + self.filter_field[field_name] = {"data": value, "type": self.type_contains} + + def between(self, field_name, value1, value2): + """ + 范围查询字段 + :param field_name: 模型字段名称 + :param value: 值 + """ + if value1 and value2 and value1 != '' and value2 != '': + self.filter_field[field_name] = {"data": [value1, value2], "type": self.type_vague} + def get_filter(self, model: db.Model): """ 获取过滤条件 @@ -43,6 +111,16 @@ class ModelFilter: 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_contains: + self.filter_list.append(getattr(model, k).contains(v.get("data"))) if v.get("type") == self.type_exact: self.filter_list.append(getattr(model, k) == v.get("data")) + if v.get("type") == self.type_neq: + self.filter_list.append(getattr(model, k) != v.get("data")) + if v.get("type") == self.type_greater: + self.filter_list.append(getattr(model, k) > v.get("data")) + if v.get("type") == self.type_less: + self.filter_list.append(getattr(model, k) < v.get("data")) + if v.get("type") == self.type_between: + self.filter_list.append(getattr(model, k).between(v.get("data")[0], v.get("data")[1])) return and_(*self.filter_list) diff --git a/applications/view/admin/user.py b/applications/view/admin/user.py index 60bfed2..393e839 100644 --- a/applications/view/admin/user.py +++ b/applications/view/admin/user.py @@ -34,9 +34,9 @@ def data(): # 查询参数构造 mf = ModelFilter() if real_name: - mf.vague(field_name="name", value=real_name) + mf.contains(field_name="realname", value=real_name) if username: - mf.vague(field_name="username", value=username) + mf.contains(field_name="username", value=username) if dept_id: mf.exact(field_name="dept_id", value=dept_id) # orm查询