@Lepilov

Почему не работает валидация в сериализаторе?

Пробую сделать проверку на уникальность поля на уровне валидации в сериализаторе и не могу поняит почему валидатор не вызывается вообще.

models.py
class Vendor(models.Model):
    active = models.BooleanField(default=False)
    ...

class VendorContacts(models.Model):
    vendor = models.ForeignKey('Vendors', related_name='contacts', on_delete=models.CASCADE)
    email = models.CharField(max_length=80, blank=True, null=True)
    .....


serializer.py

class VendorContactCreateSerializer(serializers.ModelSerializer):
    email = serializers.CharField(validators=[RegexValidator(regex=r'[^@]+@[^\.]+\..+',
                                                             message='Enter valid email address')])
    vendor = serializers.PrimaryKeyRelatedField(queryset=Vendors.objects.all(), required=False, allow_null=True)

    class Meta:
        model = VendorContacts
        fields = ('vendor',
                  'contact_name',
                  'phone',
                  'email',
                  'primary',
                  )

    def create(self, validated_data):
        phone = validated_data.pop('phone', None)
        vendor = validated_data.pop('vendor', None)
        result = re.sub('[^0-9]', '', phone)
        contact = VendorContacts.objects.create(vendor=vendor, phone=result, **validated_data)
        return contact

    def validate_email(self, value):
        print('Start validation')
        exist_contact = VendorContacts.objects.filter(email=value)
        if exist_contact:
            vc = get_object_or_404(VendorContacts, email=value)
            v = vc.vendor
            if v.active:
                raise serializers.ValidationError('Email {} already exists'.format(value))
        return value


В приведенном выше сериализаторе я выполняю проверку на уровне поля модели def validate_email().
print('Start validation') не вызывается
Пробовал так же на уровне объекта через def validate(): но тоже не вызывается. Что то не понимаю как так, вроде же стандартно все сделал.
  • Вопрос задан
  • 458 просмотров
Пригласить эксперта
Ответы на вопрос 1
@iskhomutov
Покажите код вью, где используется данный сериализатор. На вскидку - у сериализатора не вызывается метод .is_valid(), поэтому валидаторы не отрабатываются.
Подробнее: https://www.django-rest-framework.org/api-guide/se...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы