如何Pickle Django模型

时间:2015-09-11 22:53:05

标签: python django pickle

我目前正试图挑选某些Django模型。我为模型创建了__getstate____setstate__方法,但看起来pickle.dumps()正在使用默认的__reduce__

有没有办法强制使用__getstate____setstate__?如果不是,覆盖__reduce__的最佳方法是什么?

我目前正在使用Django 1.6和Python 2.7.6,如果这有帮助的话。

本质上,我使用get和set状态在酸洗之前删除两个字段以节省空间。

2 个答案:

答案 0 :(得分:1)

虽然它不是真正的回答"在我的问题中,我找到的最佳解决方案是在模型上实现dehydrate()方法,允许我改变模型__dict__并存储它。

从缓存中恢复时,它就像使用**语法一样简单,您将恢复原始模型。

答案 1 :(得分:0)

使用pickle getstate / setstate,你可以让你的模型自动选择主键,并在unpickle时使用它来加载。

https://docs.python.org/2/library/pickle.html#object.getstate

像这样:

class FooModel(Model):
    field1 = CharField()

    def __getstate__(self):
        return self.pk

    def __setstate__(self, state):
        self.pk = state
        self.refresh_from_db()

这让你腌制django模型,它的所有商店都是主键。然后当你取消它时,它会使用主键获取字段。