为什么Django中obj.save()数据已存入数据库仍返回None
问题原因
你使用的是Django框架的ORM操作,Django的模型实例save()方法本身就是无返回值设计,只要执行过程中没有抛出异常,就代表数据已经成功入库,执行完成后默认返回None属于正常情况,并不是存储操作出错。
你当前的判断逻辑存在问题:你应该是直接用if contact.save():做布尔判断,None在布尔运算中会被识别为False,所以才会跳转到else分支,这属于API使用方式错误,和存储操作本身是否成功无关。
正确的判断写法
1. 异常捕获判断(最推荐)
Django的ORM操作出错时会抛出对应的异常,直接捕获异常即可区分成功/失败:
try: contact.save() # 此处写成功提示逻辑 except Exception as e: # 此处写失败提示逻辑,可打印异常信息定位问题 print(f"数据存储失败:{str(e)}")
2. 主键判断(仅适用新增数据场景)
如果是新增数据的场景,保存前实例的主键pk为None,保存成功后会自动生成主键值,可通过该属性判断:
# 新增场景下的判断逻辑 contact = Contact(xxx=xxx) if not contact.pk: contact.save() if contact.pk: # 新增成功逻辑 else: # 新增失败逻辑
3. 自定义返回值(不推荐)
如果必须要save()有返回值,可以重写模型的save方法,不符合框架通用设计,不建议这么做:
class Contact(models.Model): # 字段定义省略 def save(self, *args, **kwargs): super().save(*args, **kwargs) return self # 或者返回True代表成功
内容的提问来源于stack exchange,提问作者Alby
相关产品推荐
相关产品推荐

