2016-03-29 3 views
0

Ich verwende Code aus https://stackoverflow.com/a/19337404/4507367 AntwortWie erzwinge die Eindeutigkeit eines Feldes im Standard-REST-Benutzermodell?

@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) 

Benutzer zu registrieren, aber ich möchte, dass die Registrierung fehlschlägt, wenn Anfrage Registrierung hat E-Mail, die bereits verwendet wird. Dies kann wahrscheinlich getan werden, indem alle Benutzer durch user_data['email'] gefiltert werden und die Anfrage abgelehnt wird, wenn die E-Mail bereits existiert, aber es fühlt sich an wie eine schlechte Übung. Es muss einen besseren Weg geben!

Antwort

1

Sie sollten eine UniqueValidator Ihrem Feld hinzufügen, um sicherzustellen, dass es einzigartig ist.

+0

Ich habe schon angeschaut, aber ich weiß nicht, wie man einen solchen Validator (in einem Modell? Oder Serializer?) – Zygro

+0

Es ist innerhalb des Serialisierers (kommt frei, wenn das Modell eine eindeutige Einschränkung hat). – Linovia

Verwandte Themen