2016-09-27 31 views
2

我想從模型中獲得隨機對象,但是如果數據庫中沒有數據我想返回404頁面。如何使用get_object_or_404和order_by('?')來獲得隨機圖像

這行代碼爲我工作很好:

dummy_image=DummyImage.objects.order_by('?').first().image_url.url 

,但我想用get_object_or_404快捷。

所以,我想這一點:

dummy_image = get_object_or_404(DummyImage).order('?').first().image_url.url 

但dosent't工作,並會造成一些問題。它說它返回了兩個以上的對象。

我該如何解決問題?

回答

2

get_object_or_404快捷方式使用get(),因此如果篩選後的查詢集返回多個對象,則會引發錯誤。

你可以切片查詢集將其限制在一個對象:

dummy_image = get_object_or_404(DummyImage.objects.order_by('?')[:1]).image_url.url 

或者,您可以手動提升Http404例外。這段代碼有點長,但你可能會發現它更清楚發生了什麼。

from django.http import Http404 

dummy_image = DummyImage.objects.order_by('?').first() 
if dummy_image is None: 
    raise Http404 
else: 
    dummy_image = dummy_image.image_url.url