我目前正试图挑选某些Django模型。我为模型创建了__getstate__
和__setstate__
方法,但看起来pickle.dumps()
正在使用默认的__reduce__
。
有没有办法强制使用__getstate__
和__setstate__
?如果不是,覆盖__reduce__
的最佳方法是什么?
我目前正在使用Django 1.6和Python 2.7.6,如果这有帮助的话。
本质上,我使用get和set状态在酸洗之前删除两个字段以节省空间。
答案 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模型,它的所有商店都是主键。然后当你取消它时,它会使用主键获取字段。