Попытки и исключения для набора запросов

Я хочу сделать что-то похожее на попытку и за исключением одного объекта ... в моей ситуации у меня есть набор Query и я хочу сделать что-то вроде :

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

Как я могу это сделать?

Вы можете использовать get_list_or_404(…) функцию [Django-doc] для этого:

from django.shortcuts import get_list_or_404

qs = get_list_or_404(model, id=1)

but since you are filtering on a primary key, it makes not much sense to use .filter(…) [Django-doc] here, you can retrieve the single Model object with get_object_or_404(…) [Django-doc]:

from django.shortcuts import get_object_or_404

obj = get_object_or_404(model, id=1)

Невозможно поймать исключение, поскольку оно не возникло.

Почему бы вам не попробовать что-то подобное?

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__'

Вы можете сделать все вышеперечисленное

Вернуться на верх