2016-03-29 7 views
0

私は、ユーザーを登録するhttps://stackoverflow.com/a/19337404/4507367答えデフォルトのRESTユーザーモデルでフィールドの一意性を強制する方法は?

@api_view(['POST']) 
def register(request): 
    VALID_USER_FIELDS = [f.name for f in get_user_model()._meta.fields] 
    serialized = UserSerializer(data=request.data) 
    if serialized.is_valid(): 
     user_data = {field: data for (field, data) in request.data.items() if field in VALID_USER_FIELDS} 

     user = get_user_model().objects.create_user(
      **user_data 
     ) 
     return Response(UserSerializer(instance=user).data, status=status.HTTP_201_CREATED) 
    else: 
     return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST) 

からのコードを使用していますが、私は、登録要求が既に使用されている電子メールを持っている場合、登録が失敗します。これはおそらくすべてのユーザーをuser_data['email']でフィルタリングし、電子メールが既に存在していても悪い習慣のように感じる場合にはその要求を拒否することで可能です。より良い方法が必要です!

答えて

1

フィールドにUniqueValidatorを追加して、一意であることを確認してください。

+0

私はすでにそれを見てきましたが、そのようなバリデーターをモデル(あるいはシリアライザー)で使う方法がわかりません。 – Zygro

+0

シリアライザーの中にあります(モデルにユニーク制約があれば無料です)。 – Linovia

関連する問題