with framework apiview python django rest django-rest-framework

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