python - apiview - Validación en query_params en Django Rest Framework
django rest framework with django 2 (1)
Con esta función:
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
Debe asegurarse de que siempre devuelve un conjunto de preguntas (o de hacer una excepción si así lo desea).
Deseo devolver model_info solo si se proporciona query_params, de lo contrario debería dar algún mensaje de error.
Probé a continuación el código, pero me está dando keyerror cuando el nombre no se pasa en los parámetros de consulta.
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
No puedo usar el método get porque también estoy usando la paginación. Si uso el método get, me devolverá todos los resultados.
Cuando estoy usando el código siguiente en get_queryset obtengo el objeto de respuesta no tiene longitud
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