DRF сериализатор проверяет неопределенное поле - PullRequest
0 голосов
/ 19 февраля 2019

Я использовал drf, а также serializer для проверки ввода пользователя.

Вот мой serializer.py

class BoardSerializer(serializers.Serializer):
    user_id = serializers.IntegerField(required=True)
    body = serializers.CharField(required=False)

И используйте его вот так.

serializer = BoardSerializer(data=request.data)
if serializer.is_valid():
     ....

Кажется, что не проверяет неопределенное поле.

Например, если я запрашиваю с {'user_id':1, 'body': 'abc', 'akak': 1},

is_valid(), не перехватывать поле 'akak' и простопередать данные.

Есть ли какая-либо функция для проверки, если поля определены в сериализаторе или нет?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Если вы создадите поле akak в модели, то вы должны определить свою модель в сериализаторе.

class BoardSerializer(ModelSerializer):
    user_id = serializers.IntegerField(required=True)
    body = serializers.CharField(required=False)

    class Meta:
       model = your-model
0 голосов
/ 19 февраля 2019

Вы можете обновить метод проверки следующим образом:

class BoardSerializer(serializers.Serializer):
    user_id = serializers.IntegerField(required=True)
    body = serializers.CharField(required=False)

    def validate(self, attrs):
        unknown =  set(self.initial_data) - set(self.fields)
        if unknown:
            raise serializers.ValidationError("Unknown field(s): {}".format(", ".join(unknown)))
        return attrs

Здесь он проверит наличие дополнительных полей, проходящих через сериализатор, и сравнит их с существующими полями.Если он существует, он выдаст ошибку (или сделает is_valid() == false).Для получения дополнительной информации вы можете проверить это , так что ответьте .

0 голосов
/ 19 февраля 2019

Поскольку akak не определен в BoardSerializer

Вам необходимо добавить akak в сериализаторе.

Вы можете добавить пользовательское поле akak в seralizer.

чтобы пропустить akak, попробуйте это

request.data.get('akak')
...