Как проверить поле модели, используя метод проверки в Django REST? - PullRequest
0 голосов
/ 23 января 2020

Я хочу проверить электронную почту при сохранении объекта через API. Я использую проверку модели, но она не работает при сохранении объекта приглашения через API. Она работает только при создании объектов через панель администратора.

models.py

def validate_email(value): 
    if "@gmail.com" in value: 
        return value 
    else: 
        raise ValidationError("This field accepts mail id of google only") 


class Invitation(models.Model):
    email = models.EmailField(validators=[validate_email])

Ответы [ 3 ]

0 голосов
/ 23 января 2020

Попробуйте проверить это через Model.clean()

0 голосов
/ 23 января 2020

Обратите внимание, что валидаторы не будут запускаться автоматически при сохранении модели, но если вы используете ModelForm, он будет запускать ваши валидаторы на любых полях, включенных в вашу форму.

Используйте сериализаторы для проверки свойств модели. https://www.django-rest-framework.org/api-guide/serializers/#validation

serializers.py

from rest_framework import serializers
class Invitation(serializers.Serializer):
    email = models.EmailField()


    def validate_email(self, value):
        if "@gmail.com" in value: 
            return value 
        else: 
            raise ValidationError("This field accepts mail id of google only") 

0 голосов
/ 23 января 2020

Документация Django гласит:

Обратите внимание, что валидаторы не будут запускаться автоматически при сохранении модели, но если вы используете ModelForm, она будет работать Ваши валидаторы в любых полях, включенных в вашу форму

и DRF документы , говорят:

В среде REST проверка выполняется полностью на класс сериализатора

Это означает, что для проверки правильности создания экземпляра модели через API вам необходимо определить все проверки в самом классе Serializer.

...