为了账号安全,请及时绑定邮箱和手机立即绑定

MultipleObjectsReturned Django

MultipleObjectsReturned Django

MM们 2021-06-01 21:18:05
我正在尝试显示一个页面,该页面显示页面上 Booking 模型中的所有预订。视图.pydef bookings(request):    booking_list = get_object_or_404(Booking.objects.filter().order_by("-day"))    return render(request, 'roombooker/base.html', {'booking_list': booking_list})模型.pyclass Booking(models.Model):    day = models.DateField(u'Booking Day',help_text=u'Day of Booking')    start_time = models.TimeField(u'Start Time', help_text=u'Start Time')    end_time = models.TimeField(u'End Time', help_text=u'End Time')    user = models.ForeignKey('User', on_delete=models.SET_NULL,null=True)    room = models.ForeignKey('Room', on_delete=models.SET_NULL,null=True)网址.pyurlpatterns =[    url(r'^bookings/',views.bookings, name='bookings'),]我放入的数据库中目前有 10 个虚拟条目。但是,当我尝试转到预订页面时,我得到:MultipleObjectsReturned at /bookings/ get() 返回了不止一个 Booking —— 它返回了 10 个!这就是我想要的,我想要 10 个 Booking 对象。这个想法是将它传递给 html 进行渲染。我该如何解决这个错误?
查看完整描述

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})


查看完整回答
反对 回复 2021-06-09
  • 1 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信