在动态创建的模型上使用Django的memcache API

时间:2010-06-03 14:40:59

标签: python django django-models memcached pickle

所以我有一个创建动态模型的函数。我以与AuditTrail非常相似的方式实现了这一点(参见django wiki)。

代码示例如下:

https://gist.github.com/0212845ae00891efe555

有什么方法可以让动态生成的类可选吗?理想情况下,这不是一个疯狂的monkeypatch / hack?

2 个答案:

答案 0 :(得分:1)

我知道pickle无法存储生成的或动态类的问题。我通过将动态类型绑定到模块dict中来解决这个问题:

new_class = type(name, (models.Model,), attrs)
mod = sys.modules[new_class.__module__]
mod.__dict__[new_class.__name__] = new_class

FAR 来自一个干净或优雅的解决方案,所以如果有人能想出更多 django友好的方式来实现这一点,我全都听见了。但是,上面的代码确实有效。

答案 1 :(得分:0)

没有答案的原因是答案很可能是hackish。我不认为你可以在没有某种hackish解决方案的情况下在不了解接收端类的结构的情况下在Python中取消对象。 pickle不支持它的一个重要原因可能是因为它是将恶意代码引入应用程序的绝佳方式。

http://www.mofeel.net/871-comp-lang-python/2898.aspx解释了为什么动态创建的类不能被打开的原因。

在每种情况下,我都是使用 dict 方法序列化了对象属性的字典,或者只是想出了一些可怕的解决方法。我希望你能找到更好的东西。

祝你好运!