可能存在 Django 1.7.4 和 django-cacheops 2.2.1 之间的交互问题

2024-04-16 16:46:15 发布

您现在位置:Python中文网/ 问答频道 /正文

从django应用程序升级到django。应用程序使用django-cacheops存储查询结果。在切换到Django 1.7之后,除了第一个请求外,所有请求都会引发以下错误:

Traceback (most recent call last):
  File "/data/virtualenv/default/lib/python2.7/site-packages/django/core/handlers/base.py", line 204, in get_response
    response = middleware_method(request, response)
  File "/data/virtualenv/default/lib/python2.7/site-packages/tracking/middleware.py", line 131, in process_response
    visitor = self._refresh_visitor(user, request, now)
  File "/data/virtualenv/default/lib/python2.7/site-packages/tracking/middleware.py", line 60, in _refresh_visitor
    visitor = Visitor.objects.get(pk=session_key)
  File "/data/virtualenv/default/lib/python2.7/site-packages/cacheops/query.py", line 398, in get
    return self.get_queryset().inplace().get(*args, **kwargs)
  File "/data/virtualenv/default/lib/python2.7/site-packages/cacheops/query.py", line 295, in get
    return qs._no_monkey.get(qs, *args, **kwargs)
  File "/data/virtualenv/default/lib/python2.7/site-packages/django/db/models/query.py", line 353, in get
    return clone._result_cache[0]
AttributeError: 'list' object has no attribute '_result_cache'

{{{1}是一个{cd3}的列表。在

^{} method that calls that functionself中的类型是CacheQuerySet。在

我怀疑这个问题的根源是django代码需要一个QuerySet对象,而duckCacheQuerySet与{}的期望不太匹配。在

也可能是某些配置不正确。以下是相关设置:

^{pr2}$

这是真的应该向django-cacheops报告的问题吗?有没有人有办法绕过这个问题(除了设置CACHEOPS_FAKE=True)?在

[编辑]:

My friend was able to replicate the issue with a bare minimum repo。这个问题似乎源于django-tracking2包。在

还没有解决方案,但正在努力。在


Tags: djangoinpydefaultdatagetvirtualenvresponse
1条回答
网友
1楼 · 发布于 2024-04-16 16:46:15

配置中确实有一个错误'ops':'count'应该拼写为'ops':['count'](不管怎样,人们都会这么做,所以cacheops的下一个版本会理解这一点)。但是,这不应该导致您收到的错误。在

您的问题很可能是来自另一个包,除了cacheops搞乱QuerySet。所以检查一下是否有猴子补丁或子类。如果__getitem__()被篡改,请特别注意。在

如果你不知道这是从哪里来的,我建议你把你的项目“狗屎变甜”:删除第三方应用程序和你的代码,直到一切开始工作,然后在最后一步注意。如果它仍然不起作用,那么你可以在github上创建一个问题,并将剩下的项目附加到那里。在

相关问题 更多 >