尝试并排除查询集
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__'
你可以做到以上几点
我想做一些类似于尝试的事情,除了单个对象。在我的情况下,我有一个查询集,我想做一些类似的事情:
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__'
你可以做到以上几点