尝试并排除查询集

Try and except for Query set

我想做一些类似于尝试的事情,除了单个对象。在我的情况下,我有一个查询集,我想做一些类似的事情:

try:
    qs = model.objects.filter(id=1)
except qs.DoesNotExist:
    raise Http_404()

我该怎么做?

您可以为此使用 get_list_or_404(…) function [Django-doc]

from django.shortcuts import <b>get_list_or_404</b>

qs = <b>get_list_or_404(</b>model, id=1<b>)</b>

但是由于您是在主键上进行过滤,因此使用 .filter(…) [Django-doc] here, you can retrieve the single Model object with get_object_or_404(…) [Django-doc]:

没有多大意义
from django.shortcuts import <strong>get_object_or_404</strong>

obj = <strong>get_object_or_404(</strong>model, id=1<strong>)</strong>

由于引发了 none,因此无法捕获异常。

你为什么不试试这样的东西呢?

qs = model.objects.filter(id=1)

if len(qs) == 0:
    raise Http_404()

或者,如果你在那之后不使用qs,效率更高的if qs.count() == 0:

views.py

@api_view(['GET'])
def getObjList(request):
    if request.method == 'GET':
       serialized_data = 
       serializers.FstObjSerializer(models.FstObjModel.objects.filter(id=2), 
       many=True)
       if serialized_data.data:
           return Response(serialized_data, status=status.HTTP_200_OK)
       else:
           return Response({"error":"any message you want"}, 
           status=status.HTTP_400_BAD_REQUEST)

序列化程序:

 class FstObjSerializer(serializers.ModelSerializer):
 class Meta:
     model = models.FstObjModel
     fields = '__all__'

你可以做到以上几点