0

我制作了一个 django 应用程序,可以即时创建模型和数据库表。据我所知,这是做我需要的唯一可行的方法。问题出现在如何在页面之间传递动态创建的模型。

我可以想出几种方法来做到这一点,但它们听起来都很可怕。我能想到的方法有:

  1. 在views.py 中使用全局变量。这似乎是一个可怕的黑客攻击,如果有多个同时用户,可能会导致冲突。
  2. 在 URL 中传递一个引用并使用一些 eval hackery 尝试重新找到模型。这可能是愚蠢的,因为模型可能在途中被垃圾收集。
  3. 使用占位符应用程序。由于多个用户之间的冲突,这似乎是一个坏主意。
  4. 具有在单击链接时发布模型的不可见表单。再次非常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()
    ...
4

2 回答 2

2

我的第一个想法是使用内容类型并通过 url 传递类型/模型信息。

于 2012-07-11T18:59:55.037 回答
1

您还可以使用 Django 的会话框架例如

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)

    ...

您可以session字典中存储几乎任何内容,并且管理它也很容易:

 del request.session['your_model']
于 2012-07-11T19:14:09.423 回答