代码之家  ›  专栏  ›  技术社区  ›  the_drow

使用django生成运行时模型

  •  4
  • the_drow  · 技术社区  · 14 年前

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

    3 回复  |  直到 14 年前
        1
  •  8
  •   Community CDub    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

        2
  •  2
  •   madewulf    14 年前

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

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

    特别地,

    manage.py inspectdb 
    

    允许您在文件中创建类。然后您应该能够动态地导入它们。

    也就是说,在我看来,你这样做是在冒险。

        3
  •  1
  •   Manoj Govindan    14 年前

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

    看看 source code 对于 inspectdb 管理命令。 Inspectdb “内省由名称设置指向的数据库中的数据库表,并将django模型模块(models.py文件)输出到标准输出。”

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

    一种方法是使用 new 模块(为了支持 types 自2.6以来)。

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

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

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