Skip to content

Configuration

fastapi-filters exposes runtime configuration through ConfigVar objects, all importable from fastapi_filters.configs. Each ConfigVar is backed by a contextvars.ContextVar, so values are scoped to the current async context and are safe to use in concurrent code.

Using a ConfigVar

Every ConfigVar exposes the same three methods:

Method Description
.get() Return the current value
.set(value) Set the value; returns a context manager that resets it on exit
.dependency(value) Return a FastAPI dependency that sets the value for the request lifetime
from fastapi import Depends, FastAPI

from fastapi_filters.configs import csv_separator_config

app = FastAPI()


@app.get("/items", dependencies=[Depends(csv_separator_config.dependency(";"))])
async def get_items():
    ...

As a context manager

with csv_separator_config.set(";"):
    ...  # separator is ";" inside this block

Available Configs

csv_separator_config

Controls the separator character used by CSVList when splitting a string into a list.

Detail Value
Import from fastapi_filters.configs import csv_separator_config
Type ConfigVar[str]
Default ","
from fastapi import Depends, FastAPI, Query

from fastapi_filters.configs import csv_separator_config
from fastapi_filters.schemas import CSVList

app = FastAPI()


@app.get("/items", dependencies=[Depends(csv_separator_config.dependency(";"))])
async def get_items(ids: CSVList[int] = Query(...)):
    return ids
# GET /items?ids=1;2;3  →  [1, 2, 3]

alias_generator_config

Overrides how query parameter names (aliases) are generated for each filter field and operator. The callable receives (field_name, operator, explicit_alias) and must return the final query parameter name as a string.

Detail Value
Import from fastapi_filters.configs import alias_generator
Type ConfigVar[Callable[[str, FilterOperator, str \| None], str] \| None]
Default None (uses the built-in field[op] format)
from fastapi import Depends, FastAPI

from fastapi_filters import FilterField, FilterSet
from fastapi_filters.configs import alias_generator

app = FastAPI()


def my_alias_generator(name: str, op, explicit_alias: str | None) -> str:
    base = explicit_alias or name
    return f"{base}__{op.value}"  # e.g. "name__eq" instead of "name[eq]"


@app.get("/users", dependencies=[Depends(alias_generator.dependency(my_alias_generator))])
async def get_users(filters: UserFilters = Depends()):
    ...


class UserFilters(FilterSet):
    name: FilterField[str]

Note

alias_generator_config is exported from fastapi_filters.configs as alias_generator (without the _config suffix).


disabled_filters_config

A container of operators that should be excluded from auto-generated filter sets. Any operator present in this container will be silently skipped when building query parameters.

Detail Value
Import from fastapi_filters.configs import disabled_filters
Type ConfigVar[Container[FilterOperator]]
Default () (no operators disabled)
from fastapi import Depends, FastAPI

from fastapi_filters import FilterField, FilterSet
from fastapi_filters.configs import disabled_filters
from fastapi_filters.operators import FilterOperator

app = FastAPI()

# Disable "like" and "ilike" globally for this endpoint
DISABLED = {FilterOperator.like, FilterOperator.ilike}


@app.get("/users", dependencies=[Depends(disabled_filters.dependency(DISABLED))])
async def get_users(filters: UserFilters = Depends()):
    ...


class UserFilters(FilterSet):
    name: FilterField[str]

filter_operators_generator_config

Replaces the function that decides which operators are generated for a given Python type. The callable receives a type and must yield FilterOperator values.

Detail Value
Import from fastapi_filters.configs import filter_operators_generator
Type ConfigVar[Callable[[type], Iterator[FilterOperator]]]
Default default_filter_operators_generator
from collections.abc import Iterator

from fastapi import Depends, FastAPI

from fastapi_filters import FilterField, FilterSet
from fastapi_filters.configs import filter_operators_generator
from fastapi_filters.operators import FilterOperator

app = FastAPI()


def minimal_generator(t: type) -> Iterator[FilterOperator]:
    """Only ever expose eq and ne, regardless of type."""
    yield FilterOperator.eq
    yield FilterOperator.ne


@app.get("/users", dependencies=[Depends(filter_operators_generator.dependency(minimal_generator))])
async def get_users(filters: UserFilters = Depends()):
    ...


class UserFilters(FilterSet):
    name: FilterField[str]
    age: FilterField[int]

Tip

You can combine disabled_filters and filter_operators_generator — the disabled set is applied after the generator, so disabled_filters is a convenient way to block a few specific operators without replacing the entire generator.