Chcę zwrócić wyrażenie_modelu tylko, jeśli podano query_params, w przeciwnym razie powinien dać komunikat o błędzie.Sprawdzanie poprawności w query_params w Django Rest Framework
Próbowałem poniżej kodu, ale daje mi keyerror, gdy nazwa nie jest przekazywana w parametrach zapytania.
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
nie mogę użyć uzyskać metody, ponieważ jestem również za pomocą paginacji, Jeśli użyję dostać metody zwróci mi wszystkie wyniki.
Kiedy używam poniżej kod w get_queryset jestem coraz obiekt odpowiedzi ma długość
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
Prawdopodobnie powinien być 'exceptions.ValidationError' -' ParseError' jest zarezerwowany dla zniekształconych danych zgodnie z [docs] (http://www.django-rest-framework.org/api-guide/exceptions/#parseerror) podczas gdy "ValidationError" dotyczy dobrze sformułowanych danych, które nie spełniają wytycznych dotyczących walidacji. – connorbode
@connorbode Myślałem o tym samym, ale kiedy próbuję podnieść 'ValidationError' z' View' to zgłasza błąd serwera 500 mówi 'Validation Error na ./../' zamiast dobrze sformułowanej odpowiedzi JSON. Myślę, że 'ValidationError' trzyma się Serializatorów. niepewny –