#django #django-rest-framework #django-serializer
#django #django-rest-framework #django-сериализатор
Вопрос:
Использование
Django==3.0.8
djangorestframework==3.11.0
Я пытаюсь проверить конечную точку GET, которая выглядит следующим образом.
/users?role=Prospectamp;limit=10amp;offset=0
Как мы можем проверить этот запрос в DRF с помощью serializers.Serializer и получить все сообщения об ошибках проверки, если они недействительны, и вернуть их в ответе api?
Сериализатор, используемый для этого запроса:
class UserIndexSerializer(serializers.Serializer):
offset = serializers.IntegerField(required=True)
limit = serializers.IntegerField(required=True)
role = serializers.CharField(allow_null=True, default=None, max_length=255)
Функция просмотра выглядит следующим образом:
@api_view(["GET"])
def user_list(request):
serializer = UserIndexSerializer(data=request.data) // trying to validate using this serializer
print("query params", request.GET)
print("request valid", serializer.is_valid())
users = User.objects.all()
serializer = UserGetSerializer(users, many=True)
return AppResponse.success("User list found.", serializer.data)
Ответ №1:
Вам нужно использовать serializers.ValidationError
здесь. Чтобы проверить поле name xyz
, вам нужно создать функцию с именем validate_xyz
и написать в ней свой код проверки. Например, чтобы проверить поле ограничения вашего сериализатора, нам нужно сделать:
class UserIndexSerializer(serializers.Serializer):
offset = serializers.IntegerField(required=True)
limit = serializers.IntegerField(required=True)
role = serializers.CharField(allow_null=True, default=None, max_length=255)
def validate_limit(self, value):
if limit > 5:
raise serializers.ValidationError('Limit cannot exceed 5.')
return value
После определения этих функций валидатора вы можете проверить, действителен ли сериализатор, выполнив
serializer.is_valid()
django-rest-framework принимает ошибки проверки, если таковые имеются, и действует соответствующим образом.
- вам необходимо вернуть значение из функции проверки.