首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么django中的obj.save()在数据保存到数据库后仍返回'none‘

在Django中,当我们调用obj.save()方法保存数据到数据库时,它会返回None。这是因为save()方法在成功保存数据到数据库后,并不返回任何值。

Django的save()方法用于将对象保存到数据库中。它执行以下操作:

  1. 如果对象已经存在于数据库中,则更新数据库中的对应记录。
  2. 如果对象不存在于数据库中,则创建一个新的数据库记录。

在执行保存操作后,save()方法并不返回任何值,而是将对象的状态更新为已保存状态。

如果我们需要获取保存后的对象,可以在保存后重新查询数据库来获取最新的数据。例如,可以使用obj = Model.objects.get(pk=obj.pk)来获取保存后的对象。

需要注意的是,如果在保存过程中发生了错误,save()方法会引发django.db.IntegrityError或其他相关的异常。在这种情况下,save()方法不会返回None,而是会引发异常,我们可以通过捕获异常来处理错误情况。

总结起来,obj.save()在数据保存到数据库后返回None,因为它的主要目的是将对象保存到数据库中,而不是返回保存后的对象。如果需要获取保存后的对象,可以重新查询数据库来获取最新的数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django中ORM操作

来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 Django orm的优势: Django的orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句;所有使用Django...,如果数据库迁移,只需要更换Django的数据库引擎即可; 一、Django连接MySQL 1、创建数据库 (注意设置 数据的字符编码) 由于Django自带的orm是data_first类型的ORM,...中的settings.py文件中设置 连接 MySQL数据库(Django默认使用的是sqllite数据库) DATABASES = { 'default': { 'ENGINE':...,其主要目的是为了封装底层SQL语句; 1、字符串类(以下都是在数据库中本质都是字符串数据类型,此类字段只是在Django自带的admin中生效) name=models.CharField(max_length...width_field=None, 上传图片的高度保存的数据库字段名(字符串) height_field=None 上传图片的宽度保存的数据库字段名

4.8K10
  • Django——实现增删改查总结

    models.py文件中每一个类都对应于数据库中的一张表。 这个类中定义的变量就是数据库中表的相应字段。...只不过现在Django给我们统一了数据库的操作,程序开发者无须考虑数据库语句的操作,也无需考虑是什么数据库。因为开发者只需要对model进行操作即可实现增删改查。...models.Publisher.objects.create(name="新华出版社") 这样就给数据库中和Publisher对应的表中插入了一条数据,并且这条数据字段name的值是新华出版社。...# 将修改保存到数据库 你可能会猜到,get方法是查询,但是你会对get方法中的id字段存有疑问,明明我们没有前面的Publisher类中没有这个变量。...那么为什么会有这个名为id的字段呢?这是因为Django的models会自动生成一个主键。不信,我给你看看数据库的字段,你就明白了。 ?

    1.1K30

    django 1.8 官方文档翻译: 2-5-6 多数据库

    该设置映射数据库别名到一个数据库连接设置的字典,这是整个Django 中引用一个数据库的方式。字典中的设置在 DATABASES 文档中有完整描述。 你可以为数据库选择任何别名。...1中,一个新的Person 对象被保存到 first 数据库中。...当保存在statement 2中发生时,p已经具有一个主键,Django 将尝试在新的数据库上使用该主键。...在你试图保存到second数据库,如果主键已经在使用,将会引抛出发一个错误。...另外,一些对象在migrate在数据库中创建一张表后自动创建: 一个默认的Site, 为每个模型创建一个ContentType(包括没有存储在同一个数据库中的模型), 为每个模型创建3个Permission

    1.5K20

    Django进阶-3-ORM单表

    一、orm使用方式: orm操作可以使用类实例化,obj.save的方式,也可以使用create()的形式 二、QuerySet数据类型 QuerySet与惰性机制 所谓惰性机制:Publisher.objects.all...query_set都会对应一块缓存,再次使用该query_set时,不会发生新的SQL操作; books=models.Book.objects.all() #这样减小了频繁操作数据库给数据库带来的压力...models.IntegerField): def db_type(self, connection): return 'integer UNSIGNED' PS: 返回值为字段在数据库中的属性..., 上传图片的高度保存的数据库字段名(字符串) height_field=None 上传图片的宽度保存的数据库字段名(字符串) DateTimeField(DateField)...DateTimeCheckMixin, Field) - 时间格式 HH:MM[:ss[.uuuuuu]] DurationField(Field) - 长整数,时间间隔,数据库中按照

    1.4K20

    Django---ORM操作大全

    前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb...:(在django中,根据代码中的类自动生成数据库的表也叫--code first) ORM:Object Relational Mapping(关系对象映射) 类名对应------》数据库中的表名 类属性对应...---------》数据库里的字段 类实例对应---------》数据库表里的一行数据 obj.id  obj.name.....类实例对象的属性 Django orm的优势: Django的orm操作本质上会根据对接的数据库引擎...,如果数据库迁移,只需要更换Django的数据库引擎即可; 一、Django连接MySQL 1、创建数据库 (注意设置 数据的字符编码) 由于Django自带的orm是data_first类型的ORM,...width_field=None, 上传图片的高度保存的数据库字段名(字符串) height_field=None 上传图片的宽度保存的数据库字段名

    7K100

    django 源码改写笔记

    一、admin 的 save_model 改写 我们后台项目有用到 django的 admin 后台模块,有些配置的功能完全可以通过 django 就可以实现,不用前端再开发管理页面了,但是有些操作需要自定义的...,比如我们配置某个小程序的二维码规则,admin 保存配置后需要调取微信端的接口更新对应的配置,admin暴露出来的接口只是将数据保存到数据库功能,实现保存后调取微信 api 接口就要改写 admin...的源码 save_mode 方法了,代码如下: from django.contrib import admin # Register your models here. from index.models...AllCustomerManager(models.Manager): # 改变查询的结果集 def all(self): # 1.调用父类的all, 获取所有数据...返回的books是QuerySet集合,还可以继续使用所有查询 return customers class CustomerManager(models.Manager):

    52020

    第15篇-使用Django进行ElasticSearch的简单方法

    前一段时间,我在Django项目上工作,想实现快速的自由文本搜索。我决定使用NoSQL数据库,而不是使用常规数据库来执行此搜索功能(例如MySQL或PostgreSQL)。...我们将很快讨论一些示例,但是首先我需要阐明我们要完成的工作: ● 在我们的本地计算机上设置ElasticSearch并确保其正常运行 ● 设置一个新的Django项目 ● 批量索引数据库中已经存在的数据...● 用户保存到数据库的每个新实例的索引 ● 基本搜索示例 好吧,这似乎很简单。...在Meta内部,您告诉ElasticSearch您希望索引被命名为什么。这将是ElasticSearch的参考点,以便当在数据库中初始化索引并保存每个创建的新对象实例时,它知道要处理的索引。...然后,您将生成器传递给常规数据库中 actions= 所有 BlogPost 对象并对其进行迭代,并 .indexing() 在每个对象上调用方法。为什么要使用发电机?

    5.3K00

    第21篇-使用Django进行ElasticSearch的简单方法

    前一段时间,我在Django项目上工作,想实现快速的自由文本搜索。我决定使用NoSQL数据库,而不是使用常规数据库来执行此搜索功能(例如MySQL或PostgreSQL)。...我们将很快讨论一些示例,但首先我需要阐明我们要完成的工作: ● 在我们的本地计算机上设置ElasticSearch并确保其正常运行 ● 设置一个新的Django项目 ● 批量索引数据库中已经存在的数据...● 用户保存到数据库的每个新实例的索引 ● 基本搜索示例 好吧,这似乎很简单。...然后,您将生成器传递到常规数据库中 所有BlogPost对象并对其进行迭代,并.indexing()在每个对象上调用方法。为什么要使用发电机?...它返回a BlogPostIndex并保存到ElasticSearch。 现在让我们尝试一下,看看是否可以对以前创建的博客文章进行批量索引。

    3.3K00

    Django的ORM操作-创建数据

    数据库的增删改查可以通过管理器对象实现 class Author(models.Model): Author.objects.create() # objects是管理器对象 Django Shell...在Django中提供了一个交互式的操作项目叫做Django Shell 他能够在交互模式 中的工程的代码执行相应的操作 注意:代码发生变化的时候,请重新进入Django Shell 启动方式:python...manage.py shell 创建数据 Django ORM使用一种直观的方式把数据库表中的数据表示成Python对象 创建数据中每一条记录就是创建一个数据对象 方法一 Author.objects.create...(key=value,key2=value2....) # key表述数据库的列名 values表示值 成功则返回创建好的实体对象 失败则抛出异常 (D:\an\envs\My_Project) C:\...beihai",Age=18,Email_addr="12233335@163.com") >>> 方法二 创建Auther实例对象,并调用save方法 obj = Author(Name="随机森林") obj.save

    48430

    Django学习笔记之Django QuerySet的方法

    ,annotate返回的是一个包含注解值的queryset,而aggregate则单独返回注解值,返回类型是一个dict,当然,这种方式在文档中叫做聚合查询,具体使用如下: >>> q = Blog.objects.aggregate...后来发现是酱紫滴,一个复杂滴model可能你从数据库中读出后根本不需要某些字段,读了又浪费时间浪费空间,怎么办?对!...用defer,延后读取,你可以在defer中指定一个或多个字段,也可用链式方法使用defer,它返回对依然是个完整对queryset但其中defer指定但字段并没有真但从数据库读出来,只有当你访问这些延后字段时...django才会从数据库读取这些数据,感觉在数据量变大后用这个方法很nice,具体用法如下: Blog.objects.defer("content").filter(publish=True).defer...7、latest(field_name=None) 和 earliest(field_name=None) 分别返回指定字段的最新数据与最早数据。

    59250

    【Django | 开发】面试招聘信息网站(快速搭建核心需求)

    产品背景 3.2唯快不破:迭代思维 3.3 如何使用迭代思想 四、数据建模&企业级数据库设计原则 4.1 数据建模 4.2 数据库设计原则 五、创建应用和模型 六、优化`admin` 6.1 分组填写...,后面修改和数据迁移操作会麻烦的多) 在 jobs.models.py应用中创建如下模型: from datetime import datetime from django.contrib.auth.models...,再通过用户的需求迭代更新) 3.3 如何使用迭代思想 找出必须功能 四、数据建模&企业级数据库设计原则 4.1 数据建模 4.2 数据库设计原则 五、创建应用和模型 需求一:HR 可以维护候选人信息...(在admin中完成实现 创建interview应用,在model.py创建模型 这里为了快速搭建核心需求,忽略了一个问题,由于一面面试官二面面试官和HR信息都直接放在了一个表里,所以这里一面二面...遇到其他类型指定转换值) def __str__(self): return self.user_name 在admin.py中 from django.contrib import

    78420

    cookie、session和中间件

    Django中session相关的方法 # 获取、设置、删除Session中数据 request.session['k1'] request.session.get('k1',None) request.session...设置session 利用上面的方法对session进行设置,设置完成后需要执行数据迁移命令,将设置保存到数据库的django_session中,这是Django默认的session值存储表。...Django在设置session时是针对浏览器的,如果同一台电脑的同一浏览器,多用户登录时在数据库中只会产生一条记录,但是不影响各个用户对session值的取用。...2.在Django_session添加数据,(数据也是经过加密处理之后的) 保存到django_session表中的数据是 随机字符串 加密之后的数据...("v1"),而数据库中的name是随机产生的字符串,可以看出字符串是通过k1随机生成的,k1和字符串是有某种转换关系的。

    1.2K20
    领券