在Django中,检查空查询集的正确方法是什么?

4
queryset = demo.objects.filter(name="non_existent_name")

if queryset.exists():
    serializer = DemoSerializer(queryset, many=True)
    return Response(serializer.data)
else:
    return Response(status=status.HTTP_404_NOT_FOUND)

当使用一个空的查询集时,我期望会得到404错误,但实际上却得到了一个空的序列化响应并返回200状态码。我的代码有什么问题?为什么exists()方法没有按照预期工作?


如果queryset.exists()在一个空的queryset中返回True - david
1
可能是重复的问题:https://dev59.com/q3M_5IYBdhLWcg3waSb9 - tatlar
你能发布完整的代码吗? - neverwalkaloner
2
或者您可以使用内置的快捷函数 get_list_or_404文档 - Philipp Zettl
@tatlar 那个线程已经有10年了。 - Xiler
@Xiler 这个问题已经两年了 :) - tatlar
1个回答

5

试试这个:

queryset = demo.objects.filter(name="non_existent_name")

if queryset:
    serializer = DemoSerializer(queryset, many=True)
    return Response(serializer.data)
else:
    return Response(status=status.HTTP_404_NOT_FOUND)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接