是否可以在Django中实现'expando'模型,就像Google App Engine一样?我在github上找到了一个名为django-expando的django应用程序,但它还处于早期阶段。
答案 0 :(得分:2)
这是可能的,但这将是一个史诗般的比例。 GAE使用称为基于列的数据库的不同数据库设计,Django ORM旨在与关系数据库链接。从技术上讲,GAE中的所有内容都存储在一个没有架构的真正大表中(这就是为什么你没有GA {应用程序的syncdb
),添加任意字段很容易。对于关系数据库,每个表只存储一种数据(通常)并且具有固定的模式,任意字段都不是那么容易。
您可以实现此方法的一种可能的方法是为expando属性创建一个新模型或表,用于存储表名,对象ID和用于pickle数据的TextField,然后拥有所有expando模型从一个子类继承,该子类重写将在此表中自动创建新行的__setattr__
和__getattr__
方法。但是,这有一些主要问题:
我的建议是找到一种设计数据库结构的方法,这样就不需要使用expando模型了。