问题描述
当我不能完全确定是否有任何带有 MyModel.objects.filter(pk=1).first()
的对象时,我通常使用 MyModel.objects.get(pk=1)
而不是 pk=1
。
在这种情况下这样做是不好的做法还是我需要
try:
MyModel.objects.get(pk=1)
except MyModel.DoesNotExist:
print('not found')
我通常使用 MyModel.objects.filter(pk=1).first()
来减少代码。
解决方法
这没什么不对。如果对象不存在,您会得到 None
。与使用 .exists()
我会在没有评论的情况下将以下内容称为自我记录,但如果您认为不是,请发表评论
obj = MyModel.objects.filter(pk=1).first()
if obj is None:
# no such object exists...
...
else
# process obj
...
我刚刚想到,如果您使用的是最新的 Python,这是“海象”运算符的用途
if obj := MyModel.objects.filter(pk=1).first() is None:
但不确定我更喜欢它!
,您可以使用 django 内置方法 get_object_or_404
如果对象不退出将返回 404 页面
from django.shortcuts import render,get_object_or_404
obj = get_object_or_404(MyModel,id=pk)