This document summarizes the public API exposed by fastapi_advanced_filters for building filter models.
- Inherit from
BaseFilterto define a filter model for an endpoint. - The inner
class FilterConfig:controls generation of fields.
model: Optional SQLAlchemy model class. If provided, you can refer to real columns in criteria.prefix: Optional string prefix used to namespace generated field names.default_op: Tuple ofOperationEnumused for implicit fields whenfields = "__all__".fields: Either"__all__"or a list ofFieldCriteria/field names to include.pagination:PaginationEnum.OFFSET_BASEDorPaginationEnum.PAGE_BASED.q_search: EitherQSearchorAdvancedQSearchfor keyword search across columns.sort_by:SortBydescribing allowed sortable attributes and aliasing.select_only:Selectabledescribing allowed selected attributes and aliasing.
get_filter_model() -> FilterResult- Returns a
FilterResultcontaining:filters: list of SQLAlchemy conditions, orNone.sorting: list of(column, direction)entries, orNone.selected_columns: list of SQLAlchemy columns, orNone.q_search: OR/AND expression, orNone.pagination: dict of pagination values, orNone.
- Returns a
FieldCriteria: describes a filterable field (name, type, op, model_attr, required_op, etc.).QSearch: define free-text search acrossmodel_attrswith a single op and logical op.AdvancedQSearch: likeQSearch, but per-op model attrs mapping.SortBy: allowed sortable attributes with aliasing options.Selectable: allowed selectable attributes with aliasing options.Pagination: configure limit/offset or page/page_size.FilterResult: normalized result ofBaseFilter.get_filter_model().
OperationEnum: EQ, NEQ, IN, NOTIN, GT, GTE, LT, LTE, LIKE, ILIKE, CONT, IS, ISNULL, BTW.OrderEnum: ASC, DESC.LogicalOperator: AND, OR.PaginationEnum: OFFSET_BASED, PAGE_BASED.
SQLALCHEMY_OP_MAPPING: mapsOperationEnumto callables generating SQLAlchemy expressions.SQLALCHEMY_SORTING_MAPPING: mapsOrderEnumto sorting callables (e.g.,col.asc()).SQLALCHEMY_LOGICAL_OP_MAPPING: mapsLogicalOperatortoand_/or_.
These are available at module import:
from fastapi_advanced_filters import (
SQLALCHEMY_LOGICAL_OP_MAPPING,
SQLALCHEMY_OP_MAPPING,
SQLALCHEMY_SORTING_MAPPING,
)to_camel_case,to_snake_case- Validation helpers:
validate_sortable_schema,validate_selectable_schema
- Most validation raises
ValueErrorwith descriptive messages. - Some mapping functions return
Nonewhen inputs are invalid (e.g., IN/NOTIN with bad values), allowing callers to skip conditions safely.