これは私の serializers.py です (組み込みの User モデルのシリアライザーを作成したい):
from rest_framework import serializers
from django.contrib.auth.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password', 'email', )
def validate_username(self, username):
if not re.search(r'^\w+$', username): #checks if all the characters in username are in the regex. If they aren't, it returns None
raise serializers.ValidationError('Username can only contain alphanumeric characters and the underscore.')
try:
User.objects.get(username=username)
except ObjectDoesNotExist:
return username
raise serializers.ValidationError('Username is already taken.')
問題は、既に存在するユーザー名を使用してユーザーを作成しようとすると、次の辞書が返されることです。
{'username': [u'This field must be unique.']}
と言うより
{'username': [u'Username is already taken']}
これに validate_username 関数を再作成しました (テスト目的で):
def validate_username(self, username):
raise serializers.ValidationError('Testing to see if an error is raised.')
エラーは発生しません。DjangoRestFramework が validate_username 関数を無視している理由は何ですか?
編集: ModelSerializer を使用していることに注意してください (ここのチュートリアル: http://www.django-rest-framework.org/api-guide/serializers/#validationでは、シリアライザーのフィールドレベルの検証についてのみ説明しています。 ModelSerializer)。それが違いを生むかどうかを確認してください。