Изменение поля Django с использованием только строки в качестве ключа

Я хочу изменить данные поля 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' не поддерживает присвоение элементов

Как я должен это сделать?

Спасибо!

Вы хотите использовать setattr:

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

user.save()

Вы можете использовать **<dict_name>(распаковку словаря) для обновления значений полей модели на месте:

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

Вы также можете указать 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)
Вернуться на верх