def post(self, request, format=None, sport=None): try: email = request.data['email'] existing_user = User.objects.get(email=email) return Response(error_response( 'User with email %s already exists.' % email), status=status.HTTP_400_BAD_REQUEST) except: pass sport = int(request.query_params.get('sport', '0')) user = UserSerializer() user_fields = [key for key in user.get_fields().keys()] user_data = { key: request.data[key] for key in user_fields if key in request.data } user_data['type_id'] = SPORTS[sport][1] user_serializer = UserSerializer(data=user_data) # Create base user if user_serializer.is_valid(): if not 'password' in request.data: return Response(error_response('Password not provided.'), status=status.HTTP_400_BAD_REQUEST) else: user = user_serializer.save() user.set_password(request.data['password']) user.save() # Create specific user (swimmer, runner...) if sport == 0: swimmer = SwimmerSerializer() swimmer_fields = [key for key in SwimmerSerializer.specific_fields] swimmer_data = { key: request.data[key] for key in swimmer_fields if key in request.data } swimmer_data['type'] = user.id serializer = SwimmerSerializer(data=swimmer_data) elif sport == 1: runner = RunnerSerializer() runner_fields = [key for key in RunnerSerializer.specific_fields] runner_data = { key: request.data[key] for key in runner_fields if key in request.data } runner_data['type'] = user.id serializer = RunnerSerializer(data=runner_data) if serializer.is_valid(): sport_user = serializer.save() return Response(success_response(serializer.data), status=status.HTTP_201_CREATED) return Response(error_response(serializer.errors), status=status.HTTP_400_BAD_REQUEST)
def post(self, request, format=None, sport=None): try: email = request.data['email'] existing_user = User.objects.get(email=email) return Response(error_response('User with email %s already exists.' % email), status=status.HTTP_400_BAD_REQUEST) except: pass sport = int(request.query_params.get('sport', '0')) user = UserSerializer() user_fields = [key for key in user.get_fields().keys()] user_data = { key: request.data[key] for key in user_fields if key in request.data } user_data['type_id'] = SPORTS[sport][1] user_serializer = UserSerializer(data=user_data) # Create base user if user_serializer.is_valid(): if not 'password' in request.data: return Response(error_response('Password not provided.'), status=status.HTTP_400_BAD_REQUEST) else: user = user_serializer.save() user.set_password(request.data['password']) user.save() # Create specific user (swimmer, runner...) if sport == 0: swimmer = SwimmerSerializer() swimmer_fields = [key for key in SwimmerSerializer.specific_fields] swimmer_data = { key: request.data[key] for key in swimmer_fields if key in request.data } swimmer_data['type'] = user.id serializer = SwimmerSerializer(data=swimmer_data) elif sport == 1: runner = RunnerSerializer() runner_fields = [key for key in RunnerSerializer.specific_fields] runner_data = { key: request.data[key] for key in runner_fields if key in request.data } runner_data['type'] = user.id serializer = RunnerSerializer(data=runner_data) if serializer.is_valid(): sport_user = serializer.save() return Response(success_response(serializer.data), status=status.HTTP_201_CREATED) return Response(error_response(serializer.errors), status=status.HTTP_400_BAD_REQUEST)