【发布时间】:2015-03-02 00:40:38
【问题描述】:
如果我有字典,这很好用
value = d.get(key, "empty")
但是如果d 是我的django model object 那么我就明白了
对象没有属性'get'
我该如何解决。如果键不存在,我希望具有与 dict 相同的行为来为空
【问题讨论】:
标签: python django dictionary
如果我有字典,这很好用
value = d.get(key, "empty")
但是如果d 是我的django model object 那么我就明白了
对象没有属性'get'
我该如何解决。如果键不存在,我希望具有与 dict 相同的行为来为空
【问题讨论】:
标签: python django dictionary
使用getattr():
value = getattr(d, key, "empty")
另一种选择是直接访问对象的__dict__:
value = d.__dict__.get(key, "empty")
但我建议使用getattr()。
更新:请注意getattr(some_dict, key) 与some_dict.get(key) 不同。 getattr() 获取对象的属性,但不获取字典的值。
【讨论】:
d.key 那么我就会得到上述行为
'dict' object has no attribute 'name'。我试过这个getattr(p.user, 'name', "")
__getattr__ 或__getattribute__ 方法来覆盖getattr() 的行为:docs.python.org/2/reference/…
File "report.py", line 46, in handle user.name = getattr(p.user, ’name', "") AttributeError: 'dict' object has no attribute ’name'
user.name 表达式中。据我了解user 是一个字典,所以你应该写user['name'] = getattr(p.user, ’name', '')