add "in" mod in search
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user