Har*_*wal 9 python django rest django-rest-framework
我只想在给出query_params的情况下返回model_info,否则它应该给出一些错误消息.
我试过下面的代码,但是当查询参数没有传递名称时,它给了我keyerror.
from rest_framework.validators import ValidationError
class ModelSerializer(serializers.ModelSerializer):
class Meta:
model = ModelName
fields = ('name', 'abbreviation')
def validate_name(self, value):
if value:
return value
else:
raise ValidationError('Enter name')
class ModelNameListList(generics.ListCreateAPIView):
renderer_classes = (JSONRenderer, )
serializer_class = ModelSerializer
def get_queryset(self):
queryset = ModelName.objects.all()
name = self.request.query_params['name']
queryset = queryset.filter(Q(name__icontains=name) | Q(abbreviation__icontains=name)).all()
return queryset
Run Code Online (Sandbox Code Playgroud)
我不能使用get方法,因为我也使用分页,如果我将使用get方法,它将返回所有结果.
当我在get_queryset中使用下面的代码时,我得到的响应对象没有长度
def get_queryset(self):
queryset = ModelName.objects.all()
name = self.request.query_params.get('name', None)
if name:
queryset = queryset.filter(Q(name__icontains=name) | Q(abbreviation__icontains=name)).all()
else:
content = {'errors': 'name is missing'}
return Response(content)
return queryset
Run Code Online (Sandbox Code Playgroud)
有了这个功能:
def get_queryset(self):
queryset = ModelName.objects.all()
name = self.request.query_params.get('name', None)
if name:
queryset = queryset.filter(Q(name__icontains=name) | Q(abbreviation__icontains=name)).all()
else:
raise exceptions.ParseError("name not supplied")
return queryset
Run Code Online (Sandbox Code Playgroud)
您应该确保始终返回查询集(或者如果您想要处理它,则引发异常)。
归档时间: |
|
查看次数: |
5761 次 |
最近记录: |