Примеры использования для PickledObjectField (django-picklefield)? - PullRequest
2 голосов
/ 25 марта 2010

в Интернете, читая о рекомендациях django dev баллов за использование маринованных полей модели с особой осторожностью.

Но в реальном примере, где бы вы использовали PickledObjectField, чтобы решить какие конкретные проблемы?

Ответы [ 4 ]

4 голосов
/ 25 марта 2010

Вы можете определенно заменить PickledObjectField на JSON и некоторую дополнительную логику для создания объекта из JSON. В конце концов, ваш вариант использования при рассмотрении вопроса об использовании логики PickledObjectField или JSON + заключается в сериализации объекта Python в вашу базу данных. Если вы можете доверять данным в объекте Python и знать, что они всегда будут доступны для сериализации, вы можете разумно использовать PickledObjectField. В моем случае (я не использую ORM в django, но это все равно должно применяться), у меня есть пара различных типов объектов, которые могут входить в мой PickledObjectField, и их определения постоянно изменяются. Вместо того, чтобы постоянно обновлять мою логику синтаксического анализа JSON для создания объекта из значений JSON, я просто использую PickledObjectField, чтобы просто хранить различные объекты, а затем позднее извлекать их в удобной форме (вызывая их функции). Предупреждение: если вы сохраняете объект через PickledObjectField, затем изменяете определение объекта, а затем извлекаете объект, старый объект может иметь проблемы с соответствием определению нового объекта (в зависимости от того, что вы изменили).

3 голосов
/ 15 августа 2015

Решаемыми проблемами являются эффективность и удобство определения и обработки сложного объекта , состоящего из множества частей .

Вы можете превратить каждый тип детали в модель и соединить их с помощью ForeignKeys. Или вы можете превратить каждый тип детали в класс, словарь, список, кортеж, перечисление или что вам по вкусу и использовать PickledObjectField для хранения и извлечения всего зверя за один шаг.

Такой подход имеет смысл , если вы никогда не будете манипулировать частями по отдельности , только сложным объектом в целом.

Пример из реальной жизни

В моем приложении есть RQdef объектов, которые по существу представляют тип с определенной базовой структурой (если вам интересно, что они означают, посмотрите здесь ).

  • RQdefs состоит из нескольких аспектов и некоторых фиксированных атрибутов.
  • Аспекты состоят из одного или нескольких Грани и некоторых фиксированных атрибутов.
  • Грани состоят из двух или более уровней и некоторых фиксированных атрибутов.
  • Уровни состоят из нескольких фиксированных атрибутов.
  • В целом, типичный RQdef будет иметь около 20-40 частей.
  • RQdef всегда полностью создается за один шаг перед сохранением в базе данных и отныне никогда не изменяется, только читается (но читается часто).

PickledObjectField более удобен и гораздо более эффективен для этой цели, чем набор из четырех моделей и 20-40 объектов для каждой RQdef .

3 голосов
/ 25 марта 2010

У нас есть система «бэкэндов» социальных сетей, которые выполняют некоторые общие функции, такие как «отправлять сообщения», «получать статус», «заводить друзей» и т. Д. Связь между каждым классом бэкэндов и пользователем - это модель django, которая сохраняет пользователь, имя сервера и учетные данные. Теперь представьте, сколько существует систем аутентификации: oauth, простые пароли, непонятные js-файлы в Facebook и т. Д. Именно здесь светит JSONField, мы сохраняем все данные аутентификации, заданные бэкендом, в словаре этой модели, который хранится в db как json. можете положить что-нибудь в это без проблем.

3 голосов
/ 25 марта 2010

Вы бы использовали его для хранения ... почти произвольных объектов Python . В общем, нет особых причин использовать его; JSON безопаснее и мобильнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...