为什么第一个示例抛出TypeError (can't pickle function objects)
,第二个示例没有,我想这与QuerySet评估(Django 1.4)有关?TypeError不能让pickle函数对象(Django缓存)
def get_or_set_foo_cache():
if not cache.get('foo'):
foo = Foo.objects.annotate(bar_count=Count('bar')).filter(bar_count__gte=1)
print type(foo) # prints <class 'django.db.models.query.QuerySet'>
cache.set('foo', foo, 60 * 15)
return foo
return cache.get('foo')
例2
def get_or_set_foo_cache():
if not cache.get('foo'):
foo = Foo.objects.all()
print type(foo) # prints <class 'django.db.models.query.QuerySet'>
cache.set('foo', foo, 60 * 15)
return foo
return cache.get('foo')
如果我设置与列表理解它的工作原理富:
foo = [obj for obj in Foo.objects.annotate(bar_count=Count('bar')).filter(bar_count__gte=1)]
你究竟在酸洗什么?当你调用例子2时,你确定'cache'没有'foo'吗? –
哪个版本的Django是它? – jasisz
如果我尝试直接设置缓存,我甚至会得到这个错误。 cache.set('foo',Foo.objects.annotate(bar_count = Count('bar'))。filter(bar_count__gte = 1)) –