2016-09-27 26 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