Модель Expando в Джанго - PullRequest
       28

Модель Expando в Джанго

3 голосов
/ 02 февраля 2010

Возможно ли реализовать модель Django в «экспандо», так же, как в Google App Engine? Я нашел приложение django с именем django-expando на github, но оно все еще находится на ранней стадии.

1 Ответ

2 голосов
/ 02 февраля 2010

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

Один возможный способ, которым вы могли бы реализовать это, состоит в том, чтобы создать новую модель или таблицу для свойств expando, в которой хранится имя таблицы, идентификатор объекта и TextField для выбранных данных, а затем наследовать все модели expando. из подкласса, который переопределяет методы __setattr__ и __getattr__, которые автоматически создадут новую строку в этой таблице. Однако есть несколько серьезных проблем с этим:

  • Во-первых, это дешевый хак и противоречит принципам реляционных баз данных.
  • Во-вторых, невозможно запросить эти поля расширения без еще большего количества взломов, и даже при этом это будет смехотворно медленным.

Моя рекомендация состоит в том, чтобы найти способ спроектировать структуру базы данных так, чтобы вам не требовались модели расширения.

...