Как фильтровать динамическое поле SQLAlchemy?Python

Программы на Python
Anonymous
Как фильтровать динамическое поле SQLAlchemy?

Сообщение Anonymous »

Я работаю с SQLAlchemy в приложении FastAPI и пытаюсь реализовать динамический расчет для поля с именем distance_to в моей модели пользователя. Цель состоит в том, чтобы фильтровать пользователей на основе этого динамически вычисляемого расстояния, но, похоже, фильтрация не работает, поскольку поле ведет себя так, как будто его не существует в модели.
При добавлении к запросу фильтрация по **distance_to__lt ** в моем запросе я получаю NULL < ?.

Код: Выделить всё

 WHERE "user_id = ?) AS anon_2)) AND NULL < ? ORDER BY user.first_name ASC
У меня есть собственный класс фильтра, определенный следующим образом:

Код: Выделить всё

from fastapi_filter.contrib.sqlalchemy import Filter

class UserFilter(Filter):
# Other fields...

distance_to__lt: Optional[float] = None
order_by: list[str] = ['first_name']

class Constants(Filter.Constants):
model = User
модель пользователя

Код: Выделить всё

from sqlalchemy.orm import query_expression

class User(Base):
__tablename__ = 'user'
# Other fields...

distance_to: Mapped[float] = query_expression()
CRUD

Код: Выделить всё

from sqlalchemy.orm import with_expression

async def get_users(
session: AsyncSession, user_filter: UserFilter, current_user: User
)

query = (
select(User)
.join(User.location)
.options(
with_expression(
User.distance_to,
"some_calculation depending on current_user"
),
)
)

query = user_filter.filter(query)
query = user_filter.sort(query)

Как я могу гарантировать, что поле distance_to распознается в процессе фильтрации?
Есть ли способ динамически вычислять и фильтровать на основе distance_to, не сталкиваясь с этой проблемой?
Будем очень признательны за любые идеи или примеры!

Подробнее здесь: https://stackoverflow.com/questions/790 ... amic-field

Вернуться в «Python»