- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个查询集,我需要懒惰地 pickle ,我遇到了一些严重的问题。 cPickle.dumps(queryset.query)
抛出以下错误:
Can't pickle <class 'myproject.myapp.models.myfile.QuerySet'>: it's not the same object as myproject.myapp.models.myfile.QuerySet
奇怪的是(或者可能不那么奇怪),当我从另一个方法或 View 调用 cPcikle
时,我只会收到该错误,但从命令行调用它时不会。
我在阅读PicklingError: Can't pickle <class 'decimal.Decimal'>: it's not the same object as decimal.Decimal后做了下面的方法和 Django mod_wsgi PicklingError while saving object :
def dump_queryset(queryset, model):
from segment.segmentengine.models.segment import QuerySet
memo = {}
new_queryset = deepcopy(queryset, memo)
memo = {}
new_query = deepcopy(new_queryset.query, memo)
queryset = QuerySet(model=model, query=new_query)
return cPickle.dumps(queryset.query)
如您所见,我变得非常绝望——这种方法仍然会产生同样的错误。这个问题有已知的、非hacky的解决方案吗?
编辑:尝试使用在 django 开发服务器上运行的 --noreload
,但无济于事。
EDIT2: 我在上面显示的错误中有错字——它是 models.QuerySet
,而不是 models.mymodel.QuerySet
它在提示。这里还有一个细微差别,就是我的模型文件被分解成多个模块,所以错误实际上是:
Can't pickle <class 'myproject.myapp.models.myfile.QuerySet'>: it's not the same object as myproject.myapp.models.myfile.QuerySet
其中 myfile 是模型下的模块之一。我在具有以下行的模型中有一个 __ini__.py
:
from myfile import *
我想知道这是否导致了我的问题。有什么方法可以改变我的 init
来保护自己免受这种情况的影响吗?还有其他测试可以尝试吗?
EDIT3: 下面是关于我的用例的更多背景信息:我有一个名为 Context
的模型,我用它来填充具有 实例的 UI 元素我的模型
。用户可以在 UI 端添加/删除/操作对象,更改它们的上下文,当它们返回时,他们可以保留它们的更改,因为上下文序列化了一切。上下文对于不同类型的过滤器/用户可以操作对象的方式具有通用外键,所有这些都必须实现上下文用来确定应该显示什么的一些方法。一个这样的过滤器采用可以传入的查询集并显示该查询集中的所有对象。这提供了一种传递在其他地方生成的任意查询集并将它们显示在 UI 元素中的方法。使用 Context 的模型是分层的(为此使用 mptt),并且每次用户点击时 UI 元素都会发出获取子项的请求,然后我们可以获取子项并根据是否显示它们来确定它们它们包含在上下文中。希望对您有所帮助!
EDIT4:我可以转储一个空的查询集,但只要我添加任何有值(value)的东西,它就会失败。
EDIT4:我在 Django 1.2.3
最佳答案
这可能不是每个人的情况,但我使用的是 Ipython 笔记本并且在我自己的类(class)中遇到了类似的问题。问题原来是来自重新加载调用
from dir.my_module import my_class
reload(dir.my_module)
删除重新加载调用,然后重新运行导入,然后在其中创建该对象的实例的单元格允许它被 pickle 。
关于python - 害怕 "not the same object error" pickle 一个 queryset.query 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6720623/
我写了一段代码只是为了了解 fread 的工作原理,但我不明白这是怎么可能的。这是我的代码: #include #include void main(){ char spool[5] =
我正在使用 fread 读取文件的第一个字节: fread(&example_struct, sizeof(example_struct), 1, fp_input); 在 linux 和 solar
如何代替 char text[10000]; 做 char text[fp_len]; 我也收到这个警告: warning: value computed is not used FILE *fp;
我有一个查询集,我需要懒惰地 pickle ,我遇到了一些严重的问题。 cPickle.dumps(queryset.query) 抛出以下错误: Can't pickle : it's not th
我是一名优秀的程序员,十分优秀!