我制作了一个django应用程序,可以动态创建模型和数据库表。据我所知,这是做我需要的唯一可行方法。问题出现在如何在页面之间传递动态创建的模型。
我可以想到一些这样做的方法,但它们听起来都很可怕。我能想到的方法是:
有没有一种好方法可以做到这一点,如果没有,这些方法中的一种比其他方法更可行吗?
P.S。如果它帮助我的应用程序从预先存在的数据库接收数据(作为json字符串),然后在本地(即在Web服务器上)缓存它,即时创建适当的模型和表。然后,我们的想法是提供这些数据并对其进行各种过滤和下钻,而不会对主数据库造成过度的压力(因为每个查询都会从数亿个数据点的数据库中返回几百个结果。)W.R.T。在图3中,基于查询和时间戳的散列来命名表,但是占位符应用程序将具有预定名称。
谢谢,
jhoyla
编辑添加:谢谢大家,我现在已经解决了这个问题。我最终同时使用这两个答案给出了完整的答案。因为我只能接受一个我将接受内容类型的一个,遗憾的是我还没有放弃投票的声誉,但是如果/我什么时候做,我会尽力回归并适当地投票。
解决方案的总体情况,
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()
...
答案 0 :(得分:2)
我的第一个想法是使用内容类型并通过网址传递类型/模型信息。
答案 1 :(得分:1)
你也可以使用Django的sessions framework,例如
def view_a(request):
your_model = request.session.get('your_model', None)
if type(your_model) == YourModel
your_model.name = 'something_else'
request.session['your_model'] = your_model
...
def view_b(request):
your_model = request.session.get('your_model', None)
...
您可以store almost anything in the session
dictionary,并且管理它也很简单:
del request.session['your_model']