Django - 如何在页面之间传递动态模型

时间:2012-07-11 16:32:20

标签: django django-models

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

我可以想到一些这样做的方法,但它们听起来都很可怕。我能想到的方法是:

  1. 在views.py中使用全局变量。这似乎是一个可怕的黑客,如果有多个同时用户,可能会导致冲突。
  2. 在URL中传递引用并使用一些eval hackery来尝试重新构建模型。这可能是愚蠢的,因为该模型可能在途中被垃圾收集。
  3. 使用占位符应用。由于多个用户之间的冲突,这似乎是一个坏主意。
  4. 拥有一个不可见的表单,在单击链接时发布模型。再次非常hacky。
  5. 有没有一种好方法可以做到这一点,如果没有,这些方法中的一种比其他方法更可行吗?

    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()
        ...
    

2 个答案:

答案 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']