gpt4 book ai didi

python - 多个对象返回 Django

转载 作者:行者123 更新时间:2023-11-30 22:08:28 25 4
gpt4 key购买 nike

我正在尝试显示一个页面,其中显示页面上预订模型中的所有预订。

View .py

def bookings(request):
booking_list = get_object_or_404(Booking.objects.filter().order_by("-day"))
return render(request, 'roombooker/base.html', {'booking_list': booking_list})

模型.py

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

url.py

urlpatterns =[
url(r'^bookings/',views.bookings, name='bookings'),
]

目前我放入的数据库中有 10 个虚拟条目。

当我尝试进入预订页面时,我得到:

MultipleObjectsReturned at /bookings/get() returned more than one Booking -- it returned 10!

这就是我想要的,我想要 10 个 Booking 对象。这个想法是将其传递给 html 进行渲染。

如何解决这个错误?

最佳答案

喜欢这个名字get_object_or_404建议,这用于检索单个元素。在幕后,它对查询集调用 .get(),如果没有元素,它会引发异常,或者由 documentation 指定。 :

Calls get() on a given model manager, but it raises Http404 instead of the model's DoesNotExist exception.

但是

get_object_or_404 有一个返回元素集合的 slibing:get_list_or_404 [Django-doc] 。不同之处在于,如果集合为空,它会引发异常,并且我们获得元素的集合。或者像文档中指定的那样:

Returns the result of filter() on a given model manager cast to a list, raising Http404 if the resulting list is empty.

所以我们可以将 View 实现为:

def bookings(request):
booking_list = <b>get_list_or_404</b>(Booking.objects.filter().order_by("-day"))
return render(request, 'roombooker/base.html', {'booking_list': booking_list})

Note: if you do not want to .filter() the queryset on anything, it is advisable to use .all() instead.

如果您不想将查询集具体化为列表,我们可以自己实现检查:

from django.http import <b>Http404</b>

def bookings(request):
booking_list = Booking.objects.all().order_by("-day")
if not book_list:
<b>raise Http404('No bookings found')</b>
return render(request, 'roombooker/base.html', {'booking_list': booking_list})

关于python - 多个对象返回 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52155601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com