使用django生成运行时模型

时间:2010-10-04 10:00:18

标签: python django django-models

我有一个需要在运行时生成模型的应用程序 这将根据当前的数据库方案完成 怎么办呢?
如何在python中在运行时创建类?
我应该创建一个json表示并将其保存在数据库中,然后将其反序列化为python对象吗?

3 个答案:

答案 0 :(得分:8)

您可以尝试阅读此http://code.djangoproject.com/wiki/DynamicModels

以下是如何创建python模型类的示例:

Person = type('Person', (models.Model,), {
    'first_name': models.CharField(max_length=255),
    'last_name': models.CharField(max_length=255),
})

您还可以阅读有关python元类的信息:
  - What is a metaclass in Python?
  - http://www.ibm.com/developerworks/linux/library/l-pymeta.html
  - http://gnosis.cx/publish/programming/metaclass_1.html

答案 1 :(得分:2)

您可以基于django的遗留数据库支持,它允许您从数据库中的定义中获取django模型:

见这里:http://docs.djangoproject.com/en/dev/howto/legacy-databases/?from=olddocs

特别是

manage.py inspectdb 

允许您在文件中创建类。然后,您应该能够即时导入它们。

那就是说,在我看来,你这样做的风险很大。

答案 2 :(得分:1)

  

我有一个需要在运行时生成模型的应用程序。

查看inspectdb管理命令的source codeInspectdb“反映NAME设置所指向的数据库中的数据库表,并将Django模型模块(models.py文件)输出到标准输出。”

  

如何在python中在运行时创建类?

这样做的一种方法是使用new模块提供的功能(自2.6以来,该模块已被弃用,而不是types。)

  

我应该创建一个json表示并将其保存在数据库中,然后将其反序列化为python对象吗?

这对我来说听起来不是一个好主意。

PS:所有人都说你应该重新考虑在运行时创建类的前提。对于Web应用程序来说,这似乎相当极端。只是我的2c。