Это возможно, но это будет куча эпических пропорций. GAE использует другой дизайн базы данных, известный как база данных на основе столбцов, а Django ORM предназначен для связи с реляционными базами данных. Поскольку технически все в GAE хранится в одной действительно большой таблице без схемы (вот почему вам не нужно syncdb
для приложений GAE), добавить произвольные поля легко. В реляционных базах данных, где каждая таблица хранит ровно один тип данных (как правило) и имеет фиксированную схему, произвольные поля не так просты.
Один возможный способ, которым вы могли бы реализовать это, состоит в том, чтобы создать новую модель или таблицу для свойств expando, в которой хранится имя таблицы, идентификатор объекта и TextField для выбранных данных, а затем наследовать все модели expando. из подкласса, который переопределяет методы __setattr__
и __getattr__
, которые автоматически создадут новую строку в этой таблице. Однако есть несколько серьезных проблем с этим:
- Во-первых, это дешевый хак и противоречит принципам реляционных баз данных.
- Во-вторых, невозможно запросить эти поля расширения без еще большего количества взломов, и даже при этом это будет смехотворно медленным.
Моя рекомендация состоит в том, чтобы найти способ спроектировать структуру базы данных так, чтобы вам не требовались модели расширения.