You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Rest Framework中如何检查对象是否存在?求更优实现方案

更优的Django对象存在性检查方案

嘿,你的写法确实能正常工作,但既然cc_num是唯一字段,有几个更符合Django最佳实践且更简洁的方法可以选择,具体看你的需求:

1. 仅判断存在性?用exists()最高效

如果你的场景只需要知道对象是否存在,不需要获取对象本身,直接用exists()方法是最优解——它会让数据库只做存在性检查,不会返回完整的对象数据,性能更好,代码也一行搞定:

exists = Card.objects.filter(cc_num=cc_number).exists()

2. 需要获取对象?用get()+DoesNotExist异常

因为cc_num是唯一字段,用get()方法比filter()[0]更语义化,它明确表示你要获取单个唯一对象。此时捕获DoesNotExist异常比IndexError更清晰,其他开发者一看就懂逻辑:

from django.core.exceptions import ObjectDoesNotExist

try:
    control = Card.objects.get(cc_num=cc_number)
    exists = True
except ObjectDoesNotExist:
    exists = False

(注:Card.DoesNotExist是ObjectDoesNotExist的子类,你也可以直接捕获Card.DoesNotExist,更精准)

3. 想避免异常?用first()方法

如果你不想写try-except代码块,可以用first()方法,它会返回查询集的第一个对象(因为字段唯一,最多一个),如果不存在就返回None,之后判断是否为None即可:

control = Card.objects.filter(cc_num=cc_number).first()
exists = control is not None

总结一下:

  • 仅需存在性判断:优先选exists()
  • 需要获取对象且希望语义明确:选get()+异常捕获
  • 想简化代码避免异常:选first()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:57:44