add "in" mod in search

This commit is contained in:
2023-10-23 19:56:47 +02:00
parent db0fe3f6cb
commit c215283059

View File

@@ -51,21 +51,25 @@ async def sde_types(sde_type: int | str, db: Session = Depends(get_session)) ->
@app.post("/sde/types/search") @app.post("/sde/types/search")
async def sde_types_search(query: List[Dict[str, int | str | None]], db: Session = Depends(get_session)) -> List[models_sde.SDEType]: async def sde_types_search(query: List[Dict[str, int | str | None | List]], db: Session = Depends(get_session)) -> List[models_sde.SDEType]:
items = [] items = []
for q in query: for q in query:
print(q) print(q)
qitems = db.query(models_sde.SDEType) qitems = db.query(models_sde.SDEType)
for k in q.keys(): for k in q.keys():
value = q[k] value = q[k]
key, mod = k.split("__", 1) if "__" in k else (k, "")
if "i" in mod: tokens = k.split("__")
key, mods = tokens[0], tokens[1:]
if "i" in mods:
condition = getattr(models_sde.SDEType, key).ilike(f"%{value}%") # change to icontains when sqlmodel start using sqlalchemy > 2.0 condition = getattr(models_sde.SDEType, key).ilike(f"%{value}%") # change to icontains when sqlmodel start using sqlalchemy > 2.0
elif "in" in mods:
condition = getattr(models_sde.SDEType, key).in_(value)
else: else:
condition = getattr(models_sde.SDEType, key) == value condition = getattr(models_sde.SDEType, key) == value
if "not" in mod: if "not" in mods:
condition = ~condition condition = ~condition
qitems = qitems.filter(condition) qitems = qitems.filter(condition)