【问题标题】:Change Django field with only the string as a key仅使用字符串作为键更改 Django 字段
【发布时间】:2021-11-02 23:51:06
【问题描述】:

我想改变一个 Django 字段的数据,只用字符串作为键。

例子:

person = Person.objects.get(pk=1)

person['name'] = 'John'

person.save()

我的代码:

changes: dict[str, Any] = json.loads(request.body)


user: User = User.objects.get(id=user_id)

for key in changes.keys():
  user[key] = changes.get(key)

user.save()

response = json.dumps([{ 'Success' : 'User changed successfully!'}])
return HttpResponse(response, content_type='application/json')

我收到以下错误消息:

TypeError: 'User' 对象不支持项目分配

我应该怎么做?

谢谢!

【问题讨论】:

    标签: python django types typeerror


    【解决方案1】:

    你想使用 setattr:

    for key in changes.keys():
      setattr(user, key, changes.get(key))
    
    user.save()
    

    【讨论】:

      【解决方案2】:

      您可以使用**<dict_name>(dictionary unpacking) 来更新模型字段值:

      User.objects.filter(id=user_id).update(**changes)
      

      【讨论】:

        【解决方案3】:

        除其他答案外,还可以在保存对象时指定updated_fields

        updated_fields = []
        for key, value in changes.items():
            if hasattr(user, key):
                setattr(user, key, value)
                updated_fields.append(key)
        
        user.save(update_fields=updated_fields)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-10
          • 1970-01-01
          • 2014-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-25
          • 2011-12-29
          相关资源
          最近更新 更多