首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >django - simplelazyobject中断模板过滤器

django - simplelazyobject中断模板过滤器
EN

Stack Overflow用户
提问于 2009-10-20 00:15:45
回答 3查看 1.2K关注 0票数 2

这是一个模板过滤器,直到最近,在我更新Django源代码之前,它一直没有问题:

代码语言:javascript
运行
复制
from pm_core.models import PMUser 
@register.filter 
def can_manage_market(user, market): 
    if not isinstance(user, PMUser): return False 
    return user.can_manage_market(market) 

筛选器已开始始终返回false。问题似乎是'user‘实例是'SimpleLazyObject’而不是PMUser (User的子类)。在互联网上搜索它,我找到了标签#12049,这表明这可能是一个类似的bug (然而,不幸的是,提供的补丁没有补救措施)。

如果有任何关于这个简单的aware的信息,我将不胜感激。

ps。我也把这个问题发到了django-users组,但是还没有收到回复。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-20 13:11:27

此问题已作为错误提交(票证#12060),并已被正式接受。感谢Peter和Daniel的帮助。

EDIT:该问题已在变更集11637中修复。

票数 1
EN

Stack Overflow用户

发布于 2009-10-19 18:40:06

正如Peter所说,这要归功于Changeset 11626。之所以现在给你一个包装器,而不是对象,是因为包装器对象的“惰性”。它的设计是这样的,如果你不实际使用它做任何事情,它永远不会获得底层的User对象--这是出于缓存优化的原因。因为您所做的只是检查类型,而不计算对象的值,所以它仍然是一个LazyObject,您的测试将失败。

您应该检查对象是否具有要调用的方法或属性,而不是检查对象是否属于特定类型。包装器应该透明地传递这些内容,现在您的测试将成功。

代码语言:javascript
运行
复制
try:
    return user.can_manage_market(market)
except AttributeError:
    return False
票数 2
EN

Stack Overflow用户

发布于 2009-10-19 16:46:08

Changeset 11626 (几天前签到)将django.core.context_processors中的'user‘定义从ContextLazyObject更改为SimpleLazyObject。我的咖啡还没有完全发挥作用,但看起来这可能是你问题的根源。您可能需要对此进行包装,或者更改测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1589651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档