Решил выложить в паблик поле 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;")
Подробнее в вики на странице проекта.
Комментариев нет:
Отправить комментарий