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
相关产品推荐
相关产品推荐

