【问题标题】:Django objects being "non subscriptable" leads me to write redundant codeDjango 对象“不可下标”导致我编写冗余代码
【发布时间】:2012-01-21 05:53:21
【问题描述】:

Django 对象不是“可下标的”,这意味着如果你有 user.name,你就不能用 user['name'] 定义它,这意味着你不能动态加载带有信息的对象。

info = {'first_name': 'Artur', 'last_name': 'Sapek'}

me = User()
for i in info:
    me[i] = info[i]

调出TypeError: 'User' object is not subscriptable,我发现自己正在编写类似的代码

info = {'first_name': 'Artur', 'last_name': 'Sapek'}

if 'first_name' in info: me.first_name = info['first_name']
if 'last_name' in info: me.first_name = info['last_name']
so on...

(它也需要 if 语句,因为有更多信息并且它并不总是完整的 - 这不是我的实际代码)

有没有更好的方法来处理 Django 对象,它不像列表、字典和字符串那样灵活地使用括号表示法?

【问题讨论】:

    标签: python django object models


    【解决方案1】:

    setattr 就是你要找的东西。

    在你的情况下,你可以这样做:

    for attr, value in info.items():
        setattr(me, attr, value)
    

    【讨论】:

    • 我知道必须有更好的方法。谢谢!
    • 乐于助人!如果您的问题得到回答,请记得回来并点击“接受”按钮:)
    【解决方案2】:

    为什么不做以下事情:

    info = {'first_name': 'Artur', 'last_name': 'Sapek'}
    user = User(**info)
    

    当然,如果您使用contrib.authUser 模型,则需要提供必填字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 2013-12-30
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多