我正在try 更新Django数据库中的用户.

获取的数据如下所示:

fetched_data = {
     'id': 1,
     'first_name': 'John',
     'last_name': 'Doe',
     'phone': '+32 12',
     'mobile_phone': '+32 13',
     'email': 'myemail@hotmail.com',
     'username': 'myusername'
}

我给用户提供的id条信息如下:

old_user = User.objects.get(pk=fetched_data['id'])

如果我按如下方式更新用户:

old_user.username = fetched_data['username']
old_user.first_name = fetched_data['first_name']
......
old_user.save()

它工作得很好,但我不想对每一条记录都这样做,因此我try 了如下操作:

for fetched_data_key in fetched_data:
    old_user.fetched_data_key = fetched_data['fetched_data_key']
    //old_user[fetched_data_key] = fetched_data['fetched_data_key'] --- I tried this way to
    old_user.save()

但那不管用.你知道我怎么才能更新用户,而不是对每条记录都这样做吗?

推荐答案

您可以在不提取和反序列化的情况下更新数据库中的行;update()可以做到这一点.例如:

User.objects.filter(id=data['id']).update(email=data['email'], phone=data['phone'])

这将发出一条SQLupdate语句,并且比POST中的代码快得多.它永远不会获取数据,也不会浪费时间创建User对象.

但是,您不能将一大堆更新数据发送到SQL数据库,然后要求它一次性将其映射到不同的行.如果您需要快速完成这样的大规模更新,最好的 Select 可能是将数据插入到单独的表中,然后再插入update it form a select on that table.据我所知,Django ORM不支持这一点.

Django相关问答推荐

Django mods.py我想要一个函数转到一个变量

Django Form标签和action属性

ModuleNotFoundError:没有名为guardian.shortcuts的模块

在 Django Rest Framework 视图中,request.user 是在请求​​到达视图之前进行数据库调用还是数据库调用发生?

Django REST Framework 图片上传

何时在 django 中使用 pre_save、save、post_save?

Django中的单表继承

为用户添加自定义权限

ImportError:无法导入设置

使用 XMLHttpRequest 提示下载文件

可以在 github 页面上托管 django 站点吗?

使用 lambda 作为属性的默认值时,Django 1.7.1 Makemigrations 失败

获取 Django 表单中的错误列表

Django模型字段按变量

过滤 Django 数据库中包含数组中任何值的字段

使用 request.user 的 Django 和中间件始终是匿名的

如何将本地文件分配给 Django 中的 FileField?

如何将 settings.py 中的变量传递给视图?

django.core.servers.basehttp.FileWrapper 在 Django 1.9 中消失

Django的不区分大小写的网址?