2010-02-02 89 views
3

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

回答

2

这是可能的,但它会是一个史诗比例的混合物。 GAE使用被称为基于列的数据库的不同数据库设计,并且Django ORM被设计为与关系数据库链接。由于技术上GAE中的所有内容都存储在一个没有模式的非常大的表格中(这就是为什么GAE应用程序不需要使用syncdb),添加任意字段非常简单。对于关系数据库来说,每个表只能存储一种数据(通常是)并且具有固定的模式,所以任意字段并不那么容易。你可以实现这个

一个可能方式是创建expando属性存储表名,对象ID和腌制数据的文本字段一个新的模式或表,然后都为Expando模型从子类继承这会覆盖__setattr____getattr__方法,该方法将自动在此表中创建一个新行。但是,这里有几个主要问题:

  • 首先,这是一个便宜的黑客攻击,违背了关系数据库的原则。
  • 其次,不可能在没有更多黑客的情况下查询这些expando字段,即使如此,它也会非常慢。

我的建议是找到一种方法来设计您的数据库结构,以便您不需要expando模型。

+0

谢谢:) 我只是在探索expando模型。我认为应用程序引擎补丁或appengine-helper对我来说是完美的。 – koko 2010-02-03 19:40:43