我一直在动态创建python元类
我想将其转储到python文件中
cls = type("ClsName", (object, ), attr)
code = xxxGetSource(cls)
writeToFile(code, "moduleName/ClsName.py")
我需要这个,因为在进行django makemigrations时,它需要找到模型的元类,但是我的模型元类是动态生成的
class XXXModel(GenerateCls({ .... }),
models.Model):
pass
答案 0 :(得分:0)
尽管Django确实具有启用此功能的工具,但实际上并不需要。
您需要具备的是,在导入server_1
| INFO [my_libs.hdfs] 2019-07-01 01:01:01 [info ] Initialized HDFS
[my_libs.hdfs] modline=my_libs.hdfs:31
时,动态创建的类必须在模块名称空间中可用。
因此,您要做的就是调用在models.py
模块级别上在代码中创建类的任何代码,并确保它们在此处可见-可以很简单:
models.py
如果在编写代码时不知道类的名称和数量,则可以使用类及其名称来更新from django.db import models
def create_classes():
Meta = type("Meta", (), {"app_label": "test2"})
DynamicUser = type("DynamicUser", (models.Model,), {"name": models.TextField(255), "__module__": __file__, "Meta": Meta})
return DynamicUser
DynamicUser = create_classes()
返回的字典。
假设globals()
函数将返回一个包含类的列表-一个可以在create_classes
models.py