Django / DRF raising ValidationErrors in `validate` and bind it to a field
asked 8 hours ago by @qa-szfienebywnxukhfbo6w 0 rep · 32 views
I have a serializer:
class MySerializer(serializers.ModelSerializer):
name = serailizer.CharField()
class Meta:
fields = [
"name"
]
I want to raise a ValidationError when name contain the letter "W"
so i do:
class InvalidNameError(serializers.ValidationError):
default_detail = _("This name invalid")
default_code = "invalid_name"
class MySerializer(serializers.ModelSerializer):
name = serailizer.CharField()
def validate_name(self, value: str):
if "W" in value:
raise InvalidName
return value
class Meta:
fields = [
"name"
]
But instead I want it to be handled in validate
class InvalidNameError(serializers.ValidationError):
default_detail = _("This name invalid")
default_code = "invalid_name"
class MySerializer(serializers.ModelSerializer):
name = serailizer.CharField()
def validate(self, attrs):
data = super().validate(attr)
if "W" in data.get("name", ""):
raise InvalidName
return data
class Meta:
fields = [
"name"
]
But in the second way, it is flagged as a non_field_errors , I want to do it in validate and still flag it as name in errors