Не моделируйте страницу в базе данных. Страницы - это презентация.
Во-первых - и прежде всего - получить правильные данные.
«И каждый блок нуждается в пользовательском рендеринге, сохранении и данных.» Разбейте это: у вас есть уникальные данные. Игнорировать «блок» и «рендеринг» с точки зрения модели. Просто определите данные без учета представления .
Серьезно. Просто определите данные в модели без какого-либо рассмотрения представления или воспроизведения или чего-либо еще. Получите модель данных правильно.
Если вы перепутаете модель и презентацию, вы никогда не получите ничего, чтобы работать хорошо. И если вы заставите его работать, вы никогда не сможете его расширить или использовать повторно.
Секунда - только после того, как модель данных вправо - вы можете перейти к представлению.
Ваши «блоки» можно сделать просто с помощью тегов HTML <div>
и таблицы стилей. Попробуйте сначала.
Ведь модель работает и очень проста. Это просто HTML и CSS, отдельно от модели.
Вашим "блокам" могут потребоваться пользовательские теги шаблона для создания более сложного, условного HTML. Попробуйте эту секунду.
Ваши "блоки" могут - в крайнем случае - быть настолько сложными, что вам придется написать специальную функцию представления для преобразования нескольких объектов в HTML. Это очень, очень редко. Вам не следует делать это, пока вы не уверены, что не можете сделать это с тегами шаблона.
Редактировать.
"запрос различных внешних источников данных"
"отдельные простые классы (не модели), имеющие метод сохранения, которые записывают в одну и ту же таблицу базы данных."
У вас есть три совершенно разные, не связанные, разные вещи.
Модель. Постоянная модель. С помощью метода save()
. Это очень, очень мало.
У них есть атрибуты и несколько методов. Нет «запроса различных внешних источников данных». Нет «рендеринга в HTML».
Внешние источники данных. Это обычные классы Python, которые получают данные.
Эти объекты (1) получают внешние данные и (2) создают объекты Model. И ничего больше. Нет "настойчивости". Нет «рендеринга в HTML».
Презентация. Это обычные шаблоны Django, которые представляют объекты Model. Нет внешнего запроса. Нет настойчивости.