среда, 18 июля 2012 г.

django-paramfield

Решил выложить в паблик поле ParamField для Django, которое изначально использовалось мной в одном старом проекте, который, к сожалению, канул в лету из-за недостатка финансирования. Но поле достаточно полезное и используется мной сейчас в других проектах на Django.

Исходники и документацию можно взять в на странице проекта в bitbucket.

Расскажу вкратце об этом поле.

Предназначается оно для хранения key-value данных с неуникальными ключами - каждому ключу может соответствовать несколько строк. То есть по сути, это массивы строк с доступом по ключу вида {"language": ["c++", "python", "as3"], "shape": ["round", "square"]} без сортировки.

Хранится все это в сериализованном виде в поле типа TextField
Для чего это может быть полезно? Ну, например, чтобы хранить закешированные данные каких-то промежуточных вычислений или кешировать параметры из many-to-many связей или просто для каких-то релевантных данных, для которых не хочется выделять отдельную таблицу  базе данных.

Почему не JSON? По нему не получится так искать. Сериализованные данные из примера выше будут выглядеть так: 

;language:c++;language:python;language:as3;shape:round;shape:square;

А это дает возможность искать по ним, например, таким образом: 

SomeModel.objects.filter(some_param_field__icontains=";language:as3;").exclude(some_param_field__icontains=";shape:round;")


Подробнее в вики на странице проекта.

Комментариев нет:

Отправить комментарий