如何腌制 Django 模型

How to Pickle Django Model

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

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

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

本质上,我使用 get 和 set state 在酸洗之前删除两个字段以保存 space。

虽然这不是真正的 "answer" 我的问题,但我找到的最佳解决方案是在模型上实施 dehydrate() 方法,允许我更改模型的 __dict__ 和存储它。

从缓存中恢复时,只需使用 ** 语法即可,您将恢复原始模型。

使用 pickle getstate/setstate 你可以让你的模型自动只 pickle 主键并在 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()

这让你 pickle django 模型,它存储的只是主键。然后,当您解开它时,它会使用主键获取字段。