Добрый день. Имеется моделька:
class Place(db.Model):
# ...
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(16), nullable=False)
sector_id = db.Column(db.Integer, nullable=False)
col = db.Column(db.Integer, nullable=False)
row = db.Column(db.Integer, nullable=False)
place_type_id = db.Column(db.Integer, nullable=False)
is_blocked_for_in = db.Column(db.Boolean, nullable=False)
is_blocked_for_out = db.Column(db.Boolean, nullable=False)
last_inventorization_at = db.Column(db.DateTime, nullable=True)
# ...
Я хочу реализовать отправку на фронт результатов с учетом полученных фильтров. И если с фильтрами на полное совпадение все в целом понятно. Ну т.е. фронт делает запрос .../places?col=2&row=3&place_type_id=1 , то можно обработать:
for arg in request.args:
filters[arg] = request.args[arg]
places = Place.query.filter_by(**filters).all()
А вот со сложными фильтрами так уже не сделаешь. Например если надо сделать отбор по полю name с like, в place_type_id приходит список, а не int-овое значение, last_inventorization_at указан интервалом и прочее. Как обычно подобные фильтры реализуют? Понятно, что можно захардкодить с кучей if-ов, но хочется сделать красивое решение.
Буду очень признателен за ответ