Вы можете переместить свойство содержимого в новую модель (PageContentModel).Я бы реализовал ссылку, имея родительский элемент PageContentModel быть PageModel (используя родительское свойство db.Model).Это позволяет вам изменять их обоих в одной транзакции (так как они находятся в одной группе сущностей).
Одно преимущество моделирования вещей с использованием PageContentModel, имеющей ссылку на PageModel (в отличие от PageModel, имеющейссылка на PageContentModel) заключается в том, что если вам когда-либо понадобится контент размером более 1 МБ, вы можете сделать это, разрешив каждому PageModel иметь 1 или более объектов PageContentModel, и вы просто разделите свой контент на куски по 1 МБ и запишите каждый кусок в другойЭкземпляр PageContentModel.Чтобы иметь возможность вернуть содержимое, вам необходимо, чтобы объекты PageContentModel имели свойство «порядок», связанное с ними, чтобы можно было перестроить содержимое в правильном порядке.
Для запроса связанных экземпляров PageContentModelдля PageModel вы бы использовали фильтр предков, например:
PageContentModel.all().ancestor(page_model_instance)
. Как предлагает @Nick, другой способ сделать это - использовать files api для записи содержимого вBLOB-объект в хранилище BLOB-объектов, а затем связать этот BLOB-объект с PageModel, указав свойство BlobReferenceProperty в PageModel.Теперь у меня была возможность попробовать это, и это работает довольно хорошо (несмотря на то, что это экспериментальная функция).Это позволило бы вашему контенту быть очень большим и, в соответствии с новой моделью ценообразования, на самом деле дешевле, чем хранение вашего контента в модели хранилища данных.
Обновлено 7 февраля 2012 г. , чтобы включить предложение от@ Ник о магазине.