Python 酸洗Django QuerySet

Python 酸洗Django QuerySet,python,django,caching,orm,pickle,Python,Django,Caching,Orm,Pickle,在我的例子中,pickle查询结果不同于unpickle查询结果。我已经在这里读到: 这类操作实际上是允许的。那么,我做错了什么 upd#1:尝试了cPickle和普通Pickle-都得到了“False” upd#2:可能的解决方案-使用list()将QuerySet转换为Python列表。在阅读以下内容时找到它:问题是您正在尝试比较两个查询集,而查询集没有定义\uuu\cmp\uu方法 因此,您可以将queryset与自身进行比较,您将得到以下结果: from myapp.models imp

在我的例子中,pickle查询结果不同于unpickle查询结果。我已经在这里读到: 这类操作实际上是允许的。那么,我做错了什么

upd#1:尝试了cPickle和普通Pickle-都得到了“False”


upd#2:可能的解决方案-使用
list()
将QuerySet转换为Python列表。在阅读以下内容时找到它:

问题是您正在尝试比较两个查询集,而查询集没有定义
\uuu\cmp\uu
方法

因此,您可以将queryset与自身进行比较,您将得到以下结果:

from myapp.models import MyModel
from cPickle import *

tmp = MyModel.objects.all()[:1]
print(loads(dumps(t, -1)) == t)
#Output is "False"
这是因为,由于没有
\uu\cmp\uu
方法,
=
计算
True
是否两个对象具有相同的标识(相同的内存地址)。你可以从报纸上读到

因此,当您这样做时:

>> tmp == tmp
True
由于对象具有不同的内存地址,因此会得到一个
False
。如果将查询转换为“可比较”对象,则可以获得所需的行为。试试这个:

>> loads(dumps(tmp, -1)) == tmp
False
希望有帮助

>> set(loads(dumps(tmp, -1))) == set(tmp)
True