gpt4 book ai didi

django - simplelazyobject 破坏模板过滤器

转载 作者:行者123 更新时间:2023-12-04 07:02:44 34 4
gpt4 key购买 nike

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

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 的子类)。在互联网上搜索它让我找到了
Ticket #12049,这表明这可能是一个类似的错误
(但是,不幸的是,提供的补丁没有补救措施)。

我很感激关于这个 simplelazyobject 的任何我以前不知道的信息。

附:我也将这个问题发布到 django-users 组,但还没有收到答案。

最佳答案

正如彼得所说,这是由于变更集 11626。现在给您一个包装器而不是对象的原因是因为该包装器对象的“懒惰”。它的设计是为了如果你实际上不做任何事情,它永远不会获得底层的 User 对象 - 这是出于缓存优化的原因。由于您所做的只是检查类型,而不是评估对象,因此它仍然是 LazyObject,并且您的测试失败。

与其检查对象是否属于特定类型(无论如何都不是 Pythonic),不如检查对象是否具有要调用的方法或属性。包装器应该透明地通过这些,您的测试现在将成功。

try:
return user.can_manage_market(market)
except AttributeError:
return False

关于django - simplelazyobject 破坏模板过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1589651/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com