Django中的Expando模型

时间:2010-02-02 08:35:50

标签: django google-app-engine expando

是否可以在Django中实现'expando'模型,就像Google App Engine一样?我在github上找到了一个名为django-expando的django应用程序,但它还处于早期阶段。

1 个答案:

答案 0 :(得分:2)

这是可能的,但这将是一个史诗般的比例。 GAE使用称为基于列的数据库的不同数据库设计,Django ORM旨在与关系数据库链接。从技术上讲,GAE中的所有内容都存储在一个没有架构的真正大表中(这就是为什么你没有GA {应用程序的syncdb),添加任意字段很容易。对于关系数据库,每个表只存储一种数据(通常)并且具有固定的模式,任意字段都不是那么容易。

您可以实现此方法的一种可能的方法是为expando属性创建一个新模型或表,用于存储表名,对象ID和用于pickle数据的TextField,然后拥有所有expando模型从一个子类继承,该子类重写将在此表中自动创建新行的__setattr____getattr__方法。但是,这有一些主要问题:

  • 首先,这是一个廉价的黑客,违背了关系数据库的原则。
  • 其次,如果没有更多的黑客攻击,就无法查询这些expando字段,即便如此,它也会非常慢。

我的建议是找到一种设计数据库结构的方法,这样就不需要使用expando模型了。