You need to enable JavaScript to run this app. Django模型设置unique=True时有没有简便方法忽略重复数据保存?
优惠活动
大模型
产品
解决方案
定价
更多

Django模型设置unique=True时有没有简便方法忽略重复数据保存?

Django保存重复数据时跳过不报错的实现方法

方法1:使用get_or_create(推荐,全Django版本兼容)

这是最常用的方案,原子操作不会有并发问题,存在重复数据时直接返回已有对象,不会抛出异常:

# submission_id为判断重复的唯一字段,defaults里放其他字段的赋值
obj, created = Reddit_Submission.objects.get_or_create(
    submission_id="你的待存内容id",
    defaults={
        "submission_time_stamp": "对应时间戳",
        "submission_title": "对应标题",
        "submission_score": "对应分数",
        "submission_author": "对应作者",
        "submission_url": "对应链接"
    }
)
# 返回值说明:
# created为True:数据不存在,本次完成新增
# created为False:数据已存在,本次跳过保存

方法2:使用save方法的ignore_conflicts参数(Django 4.2+支持)

如果你习惯直接调用实例的save方法,可以传入ignore_conflicts=True,遇到唯一约束冲突时会自动跳过保存,不会报错:

new_sub = Reddit_Submission(
    submission_id="你的待存内容id",
    submission_time_stamp="对应时间戳",
    submission_title="对应标题",
    submission_score="对应分数",
    submission_author="对应作者",
    submission_url="对应链接"
)
# 冲突时直接忽略,无报错
new_sub.save(ignore_conflicts=True)

低版本Django兼容方案

如果你的Django版本低于4.2,可以手动捕获唯一约束异常实现跳过逻辑:

from django.db import IntegrityError

new_sub = Reddit_Submission(
    # 字段赋值同上
)
try:
    new_sub.save()
except IntegrityError:
    # 命中唯一约束重复,直接跳过即可
    pass

内容的提问来源于stack exchange,提问作者Tobsterr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 07:09:01