@evgeniusmaximus
Senior system analyst (Nexign)

Как реализовать составные фильтры в flask-sqlalchemy?

Добрый день. Имеется моделька:

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-ов, но хочется сделать красивое решение.

Буду очень признателен за ответ
  • Вопрос задан
  • 290 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы