Django:在通用视图中处理空查询集

rar*_*iru 2 django django-generic-views

我有一个通用视图,有时不返回任何内容。

在这种情况下,我如何有效地处理它并引发 404?

我的方法成功了,但命中了数据库。

class MyListView(ListView):
    template_name = 'template/quest.html'

    def get_queryset(self, *args, **kwargs):

        query = (
            MyModel.objects
            .filter(...)
            .filter(...)
        )

        if query.exists():
            return query
        else:
            raise Http404
Run Code Online (Sandbox Code Playgroud)

knb*_*nbk 5

设置allow_emptyFalse

class MyListView(ListView):
    allow_empty = False
    template_name = 'template/quest.html'

    def get_queryset(self, *args, **kwargs):
        return MyModel.objects.filter(...)
Run Code Online (Sandbox Code Playgroud)

Http404如果结果get_queryset()为空(长度为 0),这将引发 a 。