В приведенном ниже примере все поля обязательны для заполнения.Запрос на публикацию с пустым телефоном и несоответствующими паролями приведет к ошибке несоответствия - возможно, потому что телефон приходит позже, когда сортируется по алфавиту.
Как добавить ошибки поля сериализатора вместо их переопределения?
IN: curl -X POST http://localhost:8000/register/ -d "password=not&password1=matching"
OUT: {"password1":["Passwords do not match."]}
class UserRegistrationSerializer(serializers.ModelSerializer):
password1 = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('password', 'password1', 'phone')
extra_kwargs = {
'password': {'write_only': True},
'password1': {'write_only': True},
'phone': {'required': True},
}
def create(self, validated_data):
del validated_data['password1']
password = validated_data.pop('password', None)
instance = self.Meta.model(**validated_data)
if password:
instance.set_password(password)
instance.save()
return instance
def validate(self, attrs):
if attrs.get('password') != attrs.get('password1'):
raise serializers.ValidationError({'password1': ['Passwords do not match.']})
return attrs
В идеале запрос curl вывел бы {"password1":["Passwords do not match."],"phone":["This field is required."]}