Метод фильтра CQL - python - PullRequest
       21

Метод фильтра CQL - python

1 голос
/ 10 октября 2019

У меня есть следующая таблица CQL.

session = columns.Date(primary_key=True, partition_key=True, required=True)
entity = columns.Text(primary_key=True, partition_key=True, required=True)
broker = columns.Text(primary_key=True, required=True)
prof = columns.Text(primary_key=True, required=True)
prod = columns.Text(primary_key=True, required=True)
.... 

Для чтения документации из движка cql есть метод 'filter', который я могу использовать для фильтрации по (сеанс, сущность) -> ключ раздела или что-то ещехочу.

Моя проблема в следующем, я хочу фильтровать всегда по (сессия, сущность), но также по возможному количеству полей, таких как 'prof' или 'prod' или обоим.

Моя функция для этого следующая:

def search_by(cls, entity, session, **kwargs): #entity, session, filter
        activity_summary = ActivitySummary.objects \
             .filter(entity=entity, session=session) \
             .filter(kwargs) \
             .allow_filtering()
        return cls._to_dataframe(activity_summary)

Где ** kwargs - это мой фильтр переменных, словарь с первичными ключами, которые я хочу использовать для его фильтрации (например, {'prof': 'MAXIMO'}).

Но это не сработает, потому что не правильно сопоставляет имена словаря с именами таблиц cql столбцов.

Есть идеи? Спасибо.

1 Ответ

2 голосов
/ 24 октября 2019

Вам нужно расширять kwargs при их прохождении.

def search_by(cls, entity, session, **kwargs): #entity, session, filter
        activity_summary = ActivitySummary.objects \
             .filter(entity=entity, session=session) \
             .filter(**kwargs) \
             .allow_filtering()
        return cls._to_dataframe(activity_summary)

Обратите внимание .filter(**kwargs) вместо .filter(kwargs)

...