代码之家  ›  专栏  ›  技术社区  ›  muudscope

如何为django模型对象自定义pickle

  •  4
  • muudscope  · 技术社区  · 16 年前

    我的应用程序使用“每用户会话”允许同一用户的多个会话共享状态。它的操作方式与django会话非常相似,它通过对对象进行pickling。

    我需要pickle一个引用django模型对象的复杂对象。标准酸洗过程将非标准化对象存储在酸洗中。因此,如果对象在数据库中的pickling和unpickling之间发生更改,那么模型现在就过时了。(我知道内存中的对象也是这样,但pickling是一个处理它的方便时间。)

    很明显,在数据库中存储这个复合体会更干净,但它不实用。随着项目的发展,它的代码必然会快速变化。每次对象的数据模型发生更改时都必须更新数据库模式,这会大大降低项目的速度。

    因此,我想要的是一种不pickle完整django模型对象的方法。相反,只需存储其类和id,并在加载时从数据库中重新获取内容。能否为此类指定自定义pickle方法?我很高兴在django模型周围编写一个包装类来处理来自db的延迟获取,如果有方法的话。

    2 回复  |  直到 16 年前
        1
  •  1
  •   S.Lott    16 年前

    不清楚你的目标是什么。

    “但是如果我只是将id和类存储在一个元组中,那么每次使用任何django对象时,我都必须返回数据库。我希望能够在页面请求过程中将正在使用的内容保存在内存中。”

    这没有意义,因为视图函数 是 一个页面请求,并且视图函数中有一些局部变量,这些变量在完成之前一直保留对象。

    此外,django的orm是一个缓存。

    最后,django提供的会话是请求之间“内存对象”的常用位置。

    你不需要腌制任何东西。

        2
  •  0
  •   mikerobi    16 年前

    可以重载序列化方法。但将id和类放在元组或dict中并对其进行pickle会更简单。