Попытки и исключения для набора запросов
Я хочу сделать что-то похожее на попытку и за исключением одного объекта ... в моей ситуации у меня есть набор 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__'
Вы можете сделать все вышеперечисленное