1 回答
TA贡献1829条经验 获得超7个赞
就像名字get_object_or_404所暗示的,这是用来检索单个元素。在幕后,它调用.get()查询集,如果没有元素,它会引发异常或文档指定的异常:
调用get()给定的模型管理器,但它引发Http404而不是模型的DoesNotExist异常。
get_object_or_404但是有一个返回元素集合的 slibing:get_list_or_404[Django-doc]。不同之处在于,如果集合为空,它会引发异常,并且我们获得元素的集合。或者像文档中指定的那样:
返回filter()对给定模型管理器转换为列表的结果,Http404如果结果列表为空则引发。
所以我们可以将视图实现为:
def bookings(request):
booking_list = get_list_or_404(Booking.objects.filter().order_by("-day"))
return render(request, 'roombooker/base.html', {'booking_list': booking_list})
注意:如果您不想.filter()使用任何查询集,建议.all()改用。
如果您不想将查询集具体化为列表,我们可以自己实现检查:
from django.http import Http404
def bookings(request):
booking_list = Booking.objects.all().order_by("-day")
if not book_list:
raise Http404('No bookings found')
return render(request, 'roombooker/base.html', {'booking_list': booking_list})
添加回答
举报