Решаемыми проблемами являются эффективность и удобство определения и обработки сложного объекта , состоящего из множества частей .
Вы можете превратить каждый тип детали в модель и соединить их с помощью ForeignKeys.
Или вы можете превратить каждый тип детали в класс, словарь, список, кортеж, перечисление или что вам по вкусу и использовать PickledObjectField
для хранения и извлечения всего зверя за один шаг.
Такой подход имеет смысл , если вы никогда не будете манипулировать частями по отдельности , только сложным объектом в целом.
Пример из реальной жизни
В моем приложении есть RQdef объектов, которые по существу представляют тип с определенной базовой структурой (если вам интересно, что они означают, посмотрите здесь ).
- RQdefs состоит из нескольких аспектов и некоторых фиксированных атрибутов.
- Аспекты состоят из одного или нескольких Грани и некоторых фиксированных атрибутов.
- Грани состоят из двух или более уровней и некоторых фиксированных атрибутов.
- Уровни состоят из нескольких фиксированных атрибутов.
- В целом, типичный RQdef будет иметь около 20-40 частей.
- RQdef всегда полностью создается за один шаг перед сохранением в базе данных и отныне никогда не изменяется, только читается (но читается часто).
PickledObjectField
более удобен и гораздо более эффективен для этой цели, чем набор из четырех моделей и 20-40 объектов для каждой RQdef .