Пробую сделать проверку на уникальность поля на уровне валидации в сериализаторе и не могу поняит почему валидатор не вызывается вообще.
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():
но тоже не вызывается. Что то не понимаю как так, вроде же стандартно все сделал.