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!
Ich habe schon angeschaut, aber ich weiß nicht, wie man einen solchen Validator (in einem Modell? Oder Serializer?) – Zygro
Es ist innerhalb des Serialisierers (kommt frei, wenn das Modell eine eindeutige Einschränkung hat). – Linovia