【发布时间】:2021-10-08 21:12:18
【问题描述】:
我最近被分配了一项具有挑战性的任务,我们正在为我们的客户设计一个网站,我的老板希望我创建灵活的模型创建功能:这意味着他不希望我们对模型进行“硬编码”,他告诉我们不要手动定义 django 模型,而是在系统运行时创建它们。
例如,我们最初没有与业务流程相关的模型,管理员用户可以在我们的首页定义表单的格式,稍后将由普通用户处理。然后我们的后端接收来自前端的请求并使用提供的字段创建表单模型。我发现我可以通过 type() 函数创建一个类,比如 type(class_name, (models.Model,), attrs),并且我确实通过这个函数获得了新类。
但我想知道如何在我们的系统中保留这个类?就像将这个新类保存到我的 models.py 中并进行迁移,以便我们的数据库也拥有它
为了简化这一点,我的伪代码如下:
form_class_attrs = {
'test_val': models.FloatField(),
'test_name': models.CharField(),
'__module__': __name__,
}
def test(request):
form_list = ['a', 'b']
for form in form_list:
form_class_name = "form_%s" % form
attrs = form_class_attrs.copy()
form_class = type(form_class_name, (models.Model,), attrs)
这里我在for循环中创建了两个类,那么如何在for循环中持久化每个form_class并进行相应的迁移呢?
【问题讨论】:
-
请发布您尝试过的内容,以便人们帮助理解并帮助您实现您想要的。
-
您可能想深入了解github.com/rvinzent/django-dynamic-models的源代码
-
@AMG 谢谢!我正在研究这个,这似乎是我需要的。
标签: python django oop design-patterns