Python 如何使用get_object_或带有order_by(';?';)的_404获取随机图像

Python 如何使用get_object_或带有order_by(';?';)的_404获取随机图像,python,django,Python,Django,我想从模型中获取随机对象,但若数据库中并没有数据,我想返回404页 这一行代码对我很有用: dummy_image=DummyImage.objects.order_by('?').first().image_url.url 但是我想使用get\u object\u或\u 404快捷方式 所以我试了一下: dummy_image = get_object_or_404(DummyImage).order('?').first().image_url.url 但它不起作用,并导致问题。

我想从模型中获取随机对象,但若数据库中并没有数据,我想返回404页

这一行代码对我很有用:

    dummy_image=DummyImage.objects.order_by('?').first().image_url.url
但是我想使用
get\u object\u或\u 404
快捷方式

所以我试了一下:

dummy_image = get_object_or_404(DummyImage).order('?').first().image_url.url
但它不起作用,并导致问题。它说它返回了两个以上的对象


如何解决此问题?

快捷方式使用
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