我制作了一个 django 应用程序,可以即时创建模型和数据库表。据我所知,这是做我需要的唯一可行的方法。问题出现在如何在页面之间传递动态创建的模型。
我可以想出几种方法来做到这一点,但它们听起来都很可怕。我能想到的方法有:
- 在views.py 中使用全局变量。这似乎是一个可怕的黑客攻击,如果有多个同时用户,可能会导致冲突。
- 在 URL 中传递一个引用并使用一些 eval hackery 尝试重新找到模型。这可能是愚蠢的,因为模型可能在途中被垃圾收集。
- 使用占位符应用程序。由于多个用户之间的冲突,这似乎是一个坏主意。
- 具有在单击链接时发布模型的不可见表单。再次非常hacky。
有没有这样做的好方法,如果没有,这些方法中的一种是否比其他方法更可行?
PS 如果它帮助我的应用程序从预先存在的数据库接收数据(作为 json 字符串),然后将其缓存在本地(即在网络服务器上),动态创建适当的模型和表。然后的想法是呈现这些数据并对其进行各种过滤和向下钻取,而不会对主数据库造成过度压力(因为每个查询都会从数亿数据点的数据库中返回数百个结果。)WRT在 3 中,表是根据查询的哈希值和时间戳命名的,但是占位符应用程序将具有预先确定的名称。
谢谢,
乔伊拉
编辑添加:谢谢大家,我现在已经解决了这个问题。我最终将两个答案一起使用以给出完整的答案。由于我只能接受一种,我将接受一种内容类型,遗憾的是我还没有放弃投票的声誉,但是如果/当我这样做时,我会努力返回并适当地投票。
整体解决方案,
from django.contrib.contenttypes.models import ContentType
view_a(request):
model = create_model(...)
request.session['model'] = ContentType.objects.get_for_model(model)
...
view_b(request):
ctmodel = request.session.get('model', None)
if not ctmodel:
return Http404
model = ctmodel.model_class()
...