所以我有一个创建动态模型的函数。我以与 AuditTrail 非常相似的方式完成此操作(请参阅 django wiki)。
代码示例在这里:
https://gist.github.com/0212845ae00891efe555
有什么办法可以让动态生成的类可以泡菜吗?理想情况下,那不是疯狂的猴子补丁/黑客?
所以我有一个创建动态模型的函数。我以与 AuditTrail 非常相似的方式完成此操作(请参阅 django wiki)。
代码示例在这里:
https://gist.github.com/0212845ae00891efe555
有什么办法可以让动态生成的类可以泡菜吗?理想情况下,那不是疯狂的猴子补丁/黑客?
我知道 pickle 无法存储生成或动态类的问题。我通过将我的动态类型绑定到模块字典中来解决这个问题,如下所示:
new_class = type(name, (models.Model,), attrs)
mod = sys.modules[new_class.__module__]
mod.__dict__[new_class.__name__] = new_class
这与一个干净或优雅的解决方案相去甚远,所以如果有人能想到一种对django 更友好的方式来实现这一点,我会全力以赴。但是,上面的代码确实有效。
没有答案的原因是因为答案可能是骇人听闻的。我不认为你可以在不知道接收端类的结构的情况下在没有某种骇人听闻的解决方案的情况下解开 Python 中的对象。pickle 不支持它的一个重要原因可能是因为它是一种将恶意代码引入应用程序的绝妙方法。
http://www.mofeel.net/871-comp-lang-python/2898.aspx解释了为什么不能取消动态创建的类。
在每种情况下,我要么只是使用dict方法序列化了对象属性的字典,要么只是想出了一些糟糕的解决方法。我希望你能想出更好的东西。
祝你好运!