Существует ли структура или шаблон для применения фильтров к данным? - PullRequest
1 голос
/ 20 сентября 2010

Проблема:

У меня есть некоторые иерархические данные в приложении Django, которые будут переданы в javascript. Некоторые из этих данных должны быть отфильтрованы из javascript на основе состояния нескольких классов данных в javascript. Мне нужен способ определения фильтров в бэкэнде (Django), который затем будет применен в javascript.

Фильтры должны выглядеть следующим образом:

dataobject.key operator value

Фильтры также могут быть условными:

if dataobject.key operator value 
and dataobject.key2 operator value 
or dataobject.key3 operator value

И, возможно, любая комбинация условных выражений, таких как:

if (condition and condition) or condition

Некоторые ключи будут иметь набор допустимых значений, а другие ключи будут иметь свободные текстовые поля. Эта система должна использоваться конечными пользователями бизнес-типа, иначе нет смысла иметь эту систему вообще. Основная цель - иметь систему, которая полностью управляется конечными пользователями. Если большинство этих целей удастся реализовать, я буду считать это победой.

Подходит ли механизм правил для этого сценария? Имеется ли среда Python или django для реализации этого поведения или какие-либо четко определенные шаблоны?

Обновление (на основе ответа С. Лотта):

Я не говорю о фильтрации данных с использованием Django ORM. Я хочу передать все данные и все правила в javascript, чтобы приложение javascript могло оставаться «отключенным».

Мне нужен способ, чтобы пользователи определяли эти правила и комбинации правил и хранили их в базе данных. Затем, когда страница загружена, эти данные и все правила извлекаются и помещаются на страницу. Определение правил является важной частью головоломки.

1 Ответ

0 голосов
/ 20 сентября 2010

Фильтры Django легко складываются друг на друга.

initial_query_set = SomeModel.objects.filter( ... some defaults ... )
if got_some_option_from_javascript:
    query_set = initial_query_set.filter( this )
else:
    query_set = initial_query_set
if got_some_other_option:
    query_set = query_set.exclude( that )
if yet_more:
    query_set = query_set.filter( and on and on )

Это стандартный подход. Если вы не говорите о фильтрах запросов Django ORM, обновите ваш вопрос.

...