Как проверить значение, не получая ничего в modelserializer - PullRequest
1 голос
/ 11 марта 2020

У меня одна проблема

class PetSerializer(ModelSerializer):
    class Meta:
        model = Pet
        fields = '__all__'

Как проверить, что этот сериализатор получает объект или нет ...

Если в backend есть значение, он возвращает правильный формат.

Но если значения нет, оно возвращает только none.

Поэтому мне нужно изменить этот ответ на строку 'none'

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Чтобы проверить ваши входные данные в сериализаторе, просто внедрите validate в соответствии с вашими потребностями

from rest_framework import serializers

class PetSerializer(ModelSerializer):
    class Meta:
        model = Pet


    def validate(self, data):
        if data is None:
            raise serializers.ValidationError("data is expected as dict()")
        if not data.get('name'):
            raise serializers.ValidationError("name is needed")

        return data

Найдите проверку уровня объекта в Документах DRF

0 голосов
/ 11 марта 2020

Если вам нужно запустить проверки на самом объекте сериализатора, вы можете переопределить метод validate класса сериализатора:

class PetSerializer(ModelSerializer):
    class Meta:
        model = Pet
        fields = '__all__' 

    def validate(self, fields):
        # you can also use `fields['name']` but that
        # would raise a KeyError if 'name' is not defined
        if not fields.get('name'):
            raise serializers.ValidationError(
                detail="pet needs a name :(",
                code="E_NO_PET_NAME"
            )

        if fields.get('species').lower() == "dinosaur":
           raise serializers.ValidationError(
                detail="can't have a dinosaur as pet",
                code="E_TOO_RECKLESS"
            )


        return fields
        # or run `super().validate(fields)`



Или если вам нужно проверить только одно поле (например, имя питомца) ), вы можете сделать это:

    ...
    def validate_name(self, name):
        if not name:
            raise serializers.ValidationError(
                detail="pet needs a name :(",
                code="E_NO_PET_NAME"
            )

Ссылки:
https://www.django-rest-framework.org/api-guide/serializers/#validation
https://www.django-rest-framework.org/api-guide/exceptions/#validationerror

...